Or put a nginx in front of the Apache, disable keepalives in the Apache server (letting nginx deal with keepalive from the clients), and reduce MaxClients so even if they're all active the server does not go into swap.
(I've done exactly that for a friend, it made a huge difference in how much traffic his box can handle).
This is something I was wondering, too. Using nginx, I can easily top 50,000 req/s (45Mbit/s) on smaller, static/cached content, using 4 cores and < 1GB RAM.
Were you still using preforking MPM or something? Surely switching to threaded or even better, event MPM would have mitigated this to a degree...