Появилась идея составлять регулярное выражение так:
"(.*1.*)(.*2.*)|(.*2.*)(.*1.*)"
Где 1 и 2 это слова введённые в поиск, но проблема в том, что при большом количестве слов в поиске регулярка получится огромной, да и алгоритм составления не прост)
Идея в том чтобы перебрать все варианты расположения слов.