strace
é uma boa maneira de começar a depurar esse tipo de problema. Tente manipular o pid de um dos processos do Apache consumindo mais CPU:
strace -f -t -o strace.output -p PID
Isso mostrará as chamadas do sistema feitas dentro desse processo. Dê uma olhada no strace.output e veja o que o processo estava fazendo. Isso pode iluminar o caminho e mostrar onde o processo está pendente. O sinalizador "-t" é muito importante aqui, pois prefixará cada linha da saída da strace com a hora do dia. Então, procure por um salto.
Por outro lado, e como você acha que o MySQL é provavelmente o culpado, eu habilitaria o log de consultas lentas, dê uma olhada nele e tente otimizar as consultas. Mais informações sobre o log de consultas lentas aqui .
Além disso, não esqueça de dar uma olhada nos arquivos de log do seu servidor.
Em relação à sua segunda pergunta, acho difícil dizer apenas com essa informação. Separar o frontend (webserver) do backend (banco de dados) é sempre uma boa prática se você tiver o orçamento para isso. Por outro lado, acho que antes de adicionar mais hardware, devemos nos concentrar em tentar otimizar o desempenho usando o hardware atual. Caso contrário, o problema provavelmente está apenas sendo adiado.
Espero que isso ajude.