Definitely limit the max # of apache processes to a sane number, but while could be more memory efficient, it isn't really as big a pig as most people make it out to be.
For example, db3l went through and added up the resident set size of all your apache processes and came up with ~2.5GB. That is an impossible number of a Linode 1440. There is simply no way to have 2.5GB
resident at once. There are other hints that this number isn't saying what its interpreted as saying, look at the earlier output from vmstat. 176M memory free, 288M for cache, 12M for buffers, only 122M of swap used.
The problem is that it is hard to express how much of a processes resident memory is actually shared memory or a shared libraries. In the case of Apache, I it is often a lot of the latter.
It could still be that you are getting slammed by too many active apache processes at times, and you should definitely see about cutting down the max number of Apache processes.
Nginx can also help. A lot of people replace Apache with Nginx. That's an obvious move to make if you are serving static files. If you have dynamic stuff that already runs in Apache, you can still win by using Nginx as a reverse proxy. Set it up to serve static content directly and proxy dynamic content to Apache. It helps both by keeping apache out of requests for static content, and it allows apache to move on to the next dynamic request more quickly because nginx takes the result quickly and then deals with feeding it out to slower clients. Some example config info
here