Ако имате 1 милион файла, през които да преминете, ще (най-добре, за което знам) ще преминете през всеки един с регулярен израз.
За всички намерения и цели, в крайна сметка ще направите едно и също нещо над редовете на таблицата, ако ги направите масова заявка с помощта на оператор LIKE или регулярен израз.
Моят собствен опит с grep обаче е, че рядко търся нещо, което не съдържа поне една пълна дума, така че може да успеете да се възползвате от база данни, за да намалите набора, в който търсите.
MySQL има вградени функции за пълнотекстово търсене, но бих препоръчал да не ги използвате, защото те означават, че не използвате InnoDB.
Можете да прочетете за тези от Postgres тук:
http://www.postgresql.org/docs/current/static/textsearch .html
След като създадете индекс в колона tsvector, можете да направите своя "grep" в две стъпки, едната за незабавно намиране на редове, които може да се квалифицират неясно, последвана от друга според вашите истински критерии:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Това ще бъде значително по-бързо от всичко, което grep може да направи.