Se hai 1 milione di file da sfogliare, li esaminerai (meglio che ne sappia) ciascuno con un'espressione regolare.
A tutti gli effetti, finirai per fare la stessa cosa sulle righe della tabella se esegui query di massa utilizzando un operatore LIKE o un'espressione regolare.
La mia esperienza con grep è che raramente cerco qualcosa che non contenga almeno una parola intera, quindi potresti essere in grado di sfruttare un database per ridurre l'insieme in cui stai cercando.
MySQL ha funzionalità di ricerca full-text native, ma sconsiglio perché significano che non stai usando InnoDB.
Puoi leggere quelli di Postgres qui:
http://www.postgresql.org/docs/current/static/textsearch .html
Dopo aver creato un indice su una colonna tsvector, puoi quindi eseguire il tuo "grep" in due passaggi, uno per trovare immediatamente le righe che potrebbero vagamente qualificarsi, seguito da un altro sui tuoi veri criteri:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Sarà molto più veloce di qualsiasi cosa grep possa fare.