Трудоемкость высока, такие проверки лучше всего делать отдельным демоном. который будет держать словарь постоянно в оперативной памяти. Не прошедшие словарь слова не обязательно спам, их надо как-то обрабатывать отдельно: например, склеивать буквы из них и проверять по черным спискам.
Но вообще есть куча других способов: привязка к телефонам (вконтакте), карма и инвайты (Хабр), лимиты на число отправляемых сообщений в единицу времени, лимиты на отправку однотипных сообщений (соцсети). Сделать 100% фильтр на основе только текста сообщения все же сложно.