This task will definitely complete before the next ice age sets in. (humor... sort of)
Consider adding some parallelism. This will only do well on a multi-cpu or box with a cpu that supports the equivalent of hyperhtreads. rdrtx1's solution is as good as it gets for a single cpu box. You may be able to run two processes in parallel. I do not know.
split your pattern file into several smaller files, because the more lines you have in the pattern file the more cpu is spent looking at each line in the search file.
Example with 1000 line file split into n x m line files: 4 X 250 or 8 x 125 might be better.
This benefits from disk controller caching and having grep run through fewer lines of patterns for each line of source. Let's say you think 8 parallel processes will do well.
Some systems do NOT do better with this, so set up a small test first.