I downported David Musser's "Fast Generic Search Algorithm" to C and adapted it to signsrch. The algorithm is a frankenstein of Knuth-Morris-Pratt and Boyer-Moore, combining the best attributes of both with some extra tricks thrown in making it extremely fast (especially for large datasets and search strings). The C code is a little spaghetti-ish since it's mostly a line for line conversion; it's somewhat easy to screw it up if you try to refactor and miss a small detail, but this version has matched the brute-force results on everything I've tested.
To use it with signsrch, just #include "hal_search.h" and replace the search_file() call in signsrch.c with search_hashed(). Function arguments and behavior are the same as the default search. I get a ~14-16x speedup with the current signature db (1752 sigs/1.84mb) and search_hashed(), allowing even my crappy 1.1ghz tbird to scan Photoshop 7 (16mb) in around a minute.
You can toy around with max_hash_range, suffix_size, and the hash function to squeeze out some extra performance. Musser has 4 different variations in his source code (DNA_search.h), but they're tuned for DNA sequences. I've managed to take Photoshop from ~65 seconds to ~55 with the current settings.
Musser's Original Paper:
http://www.cs.rpi.edu/~musser/gp/gensearch1.pdf
http://www.cs.rpi.edu/~musser/gp/gensearch/