Hvis du har 1M filer at grep igennem, vil du (så vidt jeg ved) gennemgå hver enkelt med et regulært udtryk.
For alt i verden vil du ende med at gøre det samme over tabelrækker, hvis du masseforespørger dem ved hjælp af en LIKE-operator eller et regulært udtryk.
Min egen erfaring med grep er, at jeg dog sjældent leder efter noget, der ikke indeholder mindst ét helt ord, så du kan muligvis drage fordel af en database til at reducere det sæt, du søger i.
MySQL har native fuldtekst søgefunktioner, men jeg vil anbefale imod, fordi de betyder, at du ikke bruger InnoDB.
Du kan læse om dem fra Postgres her:
http://www.postgresql.org/docs/current/static/textsearch .html
Efter at have oprettet et indeks på en tsvector-kolonne, kan du derefter gøre dit "grep" i to trin, et for straks at finde rækker, der vagt kan kvalificere sig, efterfulgt af et andet på dine sande kriterier:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Det vil være betydeligt hurtigere end noget grep kan gøre.