Zgaduje, że zapewne ma zestaw indeksów gdzie słowa są poindeksowane po każdej pozycji w słowie osobno i możliwość szybkiego liczenia przecięć indeksów. Indeksy oczywiście mieszczą się całkowicie w pamięci bo słów masz zapewne raptem kilkanaście tysięcy. W tej sposób wyszukanie listy słów spełniających np. warunek pierwsza B, trzecia O, a przedostatnia I powinno trwać ułamki milisekund.
Załóżmy że mamy indeks bitmapowy dla każdej litery i 10k słów, a rozważamy słowa maks 10-literowe. Daje nam to 10 tys bitów na zaindeksowanie każdej pozycji x litera (ustawiany bit 1 jeśli słowo zawiera litere na danej pozycji lub 0 jeśli nie zawiera). Każda litera i pozycja ma osobny indeks, ciągły w pamięci, zajmujący nieco ponad 1kB. Współczesny procesor umie robić operacje logiczne na 256 bitach równocześnie, w jednym cyklu na jednym rdzeniu. Czyli na przeskanowanie całego indeksu dla jednej litery i jednej pozycji w słowie potrzebujesz raptem 40 cykli, a zapewne nie musisz skanować całego a tylko tyle aby znaleźć jakieś jedynki (dopasowanie słowa). Przecięcie indeksów robisz instrukcja vpand.
Zakładając pesymistyczne że musimy szukać słowa mając określonych 9 liter (szukamy tej jednej brakującej dziesiątej literki), potrzebujemy 360 cykli CPU. To poniżej jednej mikrosekundy. Cały indeks dla wszystkich liter i pozycji powinien się zmieścić w cache L2 (30 liter x 10 pozycji x bitmapa 1,2 kB - ok 400 kB) a transfery z L2 są na poziomie dziesiątek GBps.
Krzyżówka na słów nie więcej niż 100. Nawet jeśli trzeba jakieś nawroty robić bo trafimy na sytuację gdzie nie da się umieścić słowa, to sekunda wydaje się aż za dużo czasu. :).