How to Merge / combine / join / paste 2 text files side-by-side

I have 2 text files, both have one simple, single column. The 2 files might be the same length, or might not, and if not, it's unknown which one would be longer.

For this example, file1 is longer:

---file1
Joe
Bob
Mary
Sally
Fred
Elmer
David

---file2
Tomato
House
Car
Elephant

All I want is to paste them side-by side into a new file like so:
No logic, no matching - just a simple paste, with a simple tab formatting to separate the 2 columns.

---file3
Joe Tomato
Bob House
Mary Car
Sally Elephant
Fred
Elmer
David

I've tried the "paste" command, like "paste file1 file2 > file3" but it works works only if file1 is longer than or the same length as file2. If file2 is longer, the extra values are misaligned too far over to the left and appear to belong to file1 as follows:

---file3
Tomato Joe
House Bob
Car Mary
Elephant Sally
Fred
Elmer
David

Also tried this awk I found in the forums, but it works only if file1 is longer or same length as file2 - it truncates file2 if file1 is shorter.

awk 'NR==FNR{_[NR]=$0;next}{print $1,$2,_[FNR]}' file2 file1 

---file3
Tomato Joe
House Bob
Car Mary
Elephant Sally

I don't care if the solution is awk, sed, shell script, or what.
Reading both files into an array might be the solution, but I don't know enough on how to write the code for that.

Any help is greatly appreciated, thanks!

Take a look at awk's printf :

awk 'NR==FNR { a[c=FNR]=$0; next }
     { printf "%-8s\t%s\n", a[FNR], $0 } 
     END { for(i=FNR+1;i<=c;i++) print a }' file2 file1

Thanks rubin!!

That works perfectly - regardless as to which of the 2 files is longer.

Exactly what I've been looking for. (Now if I could just understand it)

Thanks again!!

NR==FNR { a[c=FNR]=$0; next }
{ printf "%-8s\t%s\n", a[FNR], $0 }  

This part is similar to the code you posted, there are many threads here that explain it, you can search the forums using the keyword NR==FNR.
Regarding printf, check this: The GNU Awk User's Guide 
END { for(i=FNR+1;i<=c;i++) print a }'

This last section will print the remaining records of the file that has more records, already stored at the NR==FNR part, and it'll start after
all records of the smaller file are exhausted. This part will get executed only if say file2  has more records than file1, otherwise it won't
run at all. 

Hope I made it clear :).