Is including all that data in the object code really necessary?
If the data is part of the problem, I wonder if he can write a new linker script to rearrange the sections in the file so all code is below the signed 32-bit (~2GB) boundary. Though that raises the question... will it be able to address the data? Does initialized data access use 32- or 64-bit offsets in the small/medium models?
At any rate, it seems gcc 4.6 supports the x86_64 "large model", which should solve the problem without code/data changes.