The space is being changed because you are printing i) the 1st and 2nd field concatenated and ii) the third field. By default, awk uses a space as the output field separator (OFS), so that messes up your spacing. A simple solution is to save the line itself ($0) in the array instead of the fields:
a[$1$2]=$0;
However, your script doesn't do what you want anyway. It will only print lines from file1 that were present in file2, so anything that is only in file1 will be skipped. According to your desired output, you want to print all lines from both files and, if any line of file2 has the same 1st two fields as one in file1, print only the corresponding line from file1. You can do this in awk with:
awk 'FNR==NR{a[$1$2]=$0; print} !($1$2 in a) {print}' file1 file2
That will save each line of file1 in the array and also print it. Then, when file2 is being processed, it will print any line whose 1st two fields aren't in a.
Note that you can also do this using sort:
$ sort -uk1,2 file1 file2
11111111 abc12345 Y
22222222 xyz23456 Y
33333333 kbc34567
You just need to make sure the amount of whitespace in the two files is the same (which isn't the case in your example), or make it so with:
$ sed 's/ */\t/g' file1 file2 | sort -uk1,2
11111111 abc12345 Y
22222222 xyz23456 Y
33333333 kbc34567