Вы действительно ищете подстроки длиной всего два символа? Если это так, то поиск строки из 20 миллионов символов будет медленным, независимо от того, какое регулярное выражение вы используете (или любой другой метод, не являющийся регулярным выражением). Если строка поиска длиннее, механизм регулярных выражений может использовать алгоритм поиска, такой как Бойер-Мур или Кнут-Моррис-Пратт, чтобы ускорить поиск - чем дольше, тем лучше.
Кстати, тип поиска, о котором вы говорите, называется перекрывающиеся совпадения ; Я добавлю это к тегам.