Just a thought: How about splitting each string into a set of words and see how the two sets compare? Unlike a simple substring check this would go a long way towards solving the last example of yours.
--
Time flies when you don't know what you're doing