Os ataques DDoS são bastante difíceis de conter, exigindo um constante esforço para mitigação do ataque, estudando os access_logs ao site. Estás num servidor dedicado apenas para esse site? Se for esse o caso, tenta optimizar o teu webserver e servidor de mysql de forma a não fazer tanto esforço para servir uma página. No caso do Apache, caso tenhas o suPHP activo, desactiva e compila o Apache de forma a correr como worker ao invés de prefork, ou muda mesmo para um webserver tipo lighttpd. Certifica-te que o MySQL está configurado com diversas caches e que está configurado para utilizar todos os CPU´s (não apenas um).
Uma firewall por software poderá não servir de muito pelo que tenta contratar uma firewall por hardware para que parte do ataque seja dissipado na firewall e não no teu servidor. Verifica também se grande parte dos ataques não provém de uma mesma gama de IP´s, já que, sendo esse o caso, bloqueias a gama inteira (caso se verifique que o publico-alvo que a utiliza não é muito interessante).
Por fim, e o mais importante, projecta a aplicação a pensar nesses ataques. Se indicas que o problema reside sobretudo no load causado pelo MySQL, tenta simplificar as queries. Se for uma query com muitos JOINs subdivide-a em várias mais simples. Tenta definir tempos mínimos de espera para executar determinada acção. Cria uma espécie de switch que te permita desactivar funcionalidades não tão importantes aquando de um ataque, de forma a manteres o acesso ao site.