Ich bin spät dran, aber genau für diesen Fall (viele Needles, Preprocessing der Needles erlaubt) gibt es den Aho-Corasick-Algorithmus: http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
Als Abwandlung davon gibt es noch den Commentz-Walter-Algorithmus, der die aus dem Boyer-Moore-Algorithmus bekannte Idee des Rückwärtsvergleichs auf den Aho-Corsack-Algorithmus überträgt (und dadurch etwas schneller sein kann): http://en.wikipedia.org/wiki/Commentz-Walter_algorithm