А просто разбить на диапазоны? Ну придётся по базе пройтись не один раз, а (21^7)/MEM? Я так понимаю, что исходные данные всё равно много больше этого числа, а значит есть проблема доступа и к ним тоже. А если нет - то не могут в принципе всё комбинации встретиться. А битовая маска + сравнение вроде быстро должны работать.