Reading file1 into memory doesn't save anything. Reading file2 into memory does. The "expensive" operation is the line by line text read of the input file. Saving the split from File1 is an idea, but not necessary since each line from File1 need only be read and dealt with once as per my code.
Yeah, I thought of that after posting my second code... but I saw you'd already posted code like that, so didn't bother with another update/post.
As a suggestion to Q.and, if using Marshall's code, I'd recommend picking the shorter file for "file2" and the longer file for "file1" -- it uses the least memory to store file2, but still requires only len(file1)+len(file2) line reads.