This problem occurs frequently when matching DNA strings(or re-assembling fragments). The first approach would be to split up the strings into kmer
s, substrings, with say 4 adjacent letters. So
abcdefgh
Would become:
abcd + bcde + cdef + defg + efgh
For the complete dictionary, these substrings can be enterered into a hashtable, each carrying as a payload a list of the original strings (their numbers) that contain them (and possibly the offset where they can be found)
To search, treat the string under test the same as the dictionary, and look its fragment up in the hashtable. Now a hit will result in all five fragments to be found, with the correct offsets. A partial hit will yield fewer than five fragments, but with the correct offsets.
Of course a lot of false-negative hits will result from the search, but by combining (logical AND) of the inverted index lists, and by only selecting the hits at about the right index, things get unique pretty fast.
For the problem size in the OP's question the running time would probably be a few (tens of ) milliseconds.
BTW: As a side effect of this method, substitutions will behave almost the same as indels. In the example they would spoin one (at the ends) to four (in the middle) kmer-matches. For larger strings this is not a problem, for small strings (like in the example it is (and you could use smaller fragments)
Update: I just read the link, and it appears they use 2-mers, too (and throw some statistics at it)