After fixing bad algorithms, dealing with performance and resource utilization basically comes down to a series of trade-offs. In most cases:
Less RAM = More CPU or more disk space (and much slower)
Less CPU = more disk or RAM
Less disk = more network, RAM and/or CPU