As poige mentions in a comment to another answer, use
fgrep if you can. This treats any regex characters as literals. You can still get the effect of alternation by combining this with the
-f file option, and putting your patterns in file, one pattern to a line.
If you need your patterns to include regex, then try limiting yourself to classic ERE syntax, and use
egrep. Classic ERE syntax doesn't include backreferences, so no patterns of the form
...(pat)...\1... Potentially this may use a DFA to perform the match, and be more efficient. But that depends on your egrep implementation. More discussion of this is here. Note that some egrep implementations like Gnu's will accept patterns with backreferences; but when matching those patterns the efficiency advantage mentioned here will certainly not be present.
I mention the
egrep optimization for theoretical interest, and because it'd be worth testing to see if it helps in your intended use. I'd guess that, as manatwork says, Gnu's grep engine is better at figuring out how to optimize than you are.