Most of the time, CPU spikes like that are caused by having too many Apache processes/threads.
MySQL is also a memory hog but it usually won't exceed a certain limit, especially when you use the Debian/Ubuntu default config with the moderately low buffer settings. Apache, on the other hand, tends to get out of hand very easily in its default settings. You need to cut down on the number of processes/threads/max-clients or it will crash your server whenever there's a bit of traffic.
Even better solution:
http://www.lighttpd.net/
http://nginx.org/