I have a great story about generating word searches. I once got an angry email from a superintendent at a school district in Washington state using my algorithm. He said 'the generator inserted the phrase "killanigger" in the middle of the word search. This is obviously intentional on the part of the programmer since the odds of a phrase of this length being generated randomly is exceedingly small.'
I was very confused because I had implemented a bad word filter which I knew worked (it was the most interesting part of building a word search). And obviously, I didn't hard code that string in my program!
I asked to see the offending puzzle. Upon inspection, I found that the word search contained the word "ORIGINAL". When reversed for the word search it is "LANIGIRO" (which contains the substring "NIGIRO"). The start of another word - "LAW" - was placed next to "LANIGIRO" (by random chance) creating the string "LLANIGIRO". The two preceding randomly chosen letters were "K" and "I", forming the string "KILLANIGIRO".
I explained it to the superintendent, and all was well again.
That's actually pretty amusing and just bad luck. I wonder if your bad word filter would have caught it if you used some sort of fuzzy word lookup. Probably would have increased the time to remove those quite a bit, though.
And now that you mention it, the bad word filter does sound like fun to build. I've got a bunch of ideas for how to do it best floating around in my head.