감시 단어(watched words)를 사용하여 반복적인 스팸을 대응하다 보면 이 한계에 부딪힐 가능성이 있다고 생각합니다. 그래서 OP에게 도움이 되지는 않더라도, 미래에 다른 사람들에게 유용할 수 있는 몇 가지 생각이 떠올랐습니다.
코드 변경 없이 이 문제를 해결하는 방법은 [Using Regex with Watched Words]에 언급된 대로 정규식(regex)을 사용하는 것으로 변경하는 것입니다. 여러 단어를 하나의 정규식으로 묶을 수 있습니다. 정규식에 익숙하지 않으면 실수하기 쉽지만, 기술적으로는 가능합니다. (정규식을 잘 알고 있기 때문에 저는 이 방향으로 진행할 가능성이 높습니다.)
또한, 여기에서 플러그인을 작성하는 두 가지 방식이 있을 것으로 예상합니다.
2000개 제한의 이유는 알고리즘이 확장성이 좋지 않고 동기적으로 실행되기 때문이지만, 이는 임의의 제한입니다. 단순한 플러그인이 2000개 단어 제한을 원키 패치(monkey-patch)하여 성능 저하를 감수하면서 더 많은 단어를 허용할 수 있을 것으로 예상합니다. 하지만 제 개인적으로는 10,000개 항목에 대해서는 그렇게 하지 않을 것입니다!
다른, 혹은 상호 보완적인 접근 방식은 플래깅(flagging)을 위해 별도의 목록을 두고, 각 게시글 생성/수정 시마다 발동되는 사이드키크(Sidekiq) 작업을 통해 비동기적으로 처리하는 것입니다.