Om du har 1M filer att greppa igenom kommer du (bäst jag vet) att gå igenom var och en med ett reguljärt uttryck.
I alla avseenden kommer du att göra samma sak över tabellrader om du massförfrågar dem med en LIKE-operator eller ett reguljärt uttryck.
Min egen erfarenhet av grep är att jag sällan letar efter något som inte innehåller minst ett helt ord, så du kanske kan dra nytta av en databas för att minska mängden du söker i.
MySQL har inbyggda fulltextsökfunktioner, men jag skulle rekommendera mot eftersom de betyder att du inte använder InnoDB.
Du kan läsa om dem från Postgres här:
http://www.postgresql.org/docs/current/static/textsearch .html
Efter att ha skapat ett index på en tsvector-kolumn kan du sedan göra ditt "grep" i två steg, ett för att omedelbart hitta rader som kan vara vagt kvalificerade, följt av ett annat på dina sanna kriterier:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Det kommer att vara betydligt snabbare än något grep kan göra.