Se você tiver 1 milhão de arquivos para percorrer, você (melhor que eu saiba) passará por cada um com uma expressão regular.
Para todos os efeitos, você acabará fazendo a mesma coisa nas linhas da tabela se as consultar em massa usando um operador LIKE ou uma expressão regular.
Minha própria experiência com o grep é que raramente procuro algo que não contenha pelo menos uma palavra completa, portanto, você pode aproveitar um banco de dados para reduzir o conjunto no qual está pesquisando.
O MySQL tem recursos nativos de pesquisa de texto completo, mas eu recomendo porque eles significam que você não está usando o InnoDB.
Você pode ler sobre os do Postgres aqui:
http://www.postgresql.org/docs/current/static/textsearch .html
Depois de criar um índice em uma coluna tsvector, você pode fazer seu "grep" em duas etapas, uma para encontrar imediatamente linhas que possam se qualificar vagamente, seguidas de outra em seus critérios verdadeiros:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Isso será significativamente mais rápido do que qualquer coisa que o grep possa fazer.