There is a really easy way to do it right now, that just involves recoding some drivers (no hardware needs to be changed): steal the port bytes from TCP and UDP and use them as two additional bytes of host address. No server is using all of its ports; turning them into addresses (and requiring a server to have as many addresses as it has connections open) would flatten the two spaces together, which seems almost elegant to me.
You realize that if you did this, your computer could only ever open 256 concurrent outbound connections to a single host, right?
If you really were going to upgrade every router and switch on the Internet and port every single program that used the BSD sockets interface or the Win32 WSA Socket interface, and for some perverse reason you felt you needed a backwards-compatible frame format, you wouldn't break TCP or UDP to do it. You'd add a pair of IP options, called "source address extension" and "destination address extension".
But of course, you wouldn't do this, because if you're going to go through that much pain, you might as well get the full IPv6 address space.
I'm just not sure thats the case. IPv6 has too much of a 'design by committee' feel to it, which usually means it falls over as a standard in Internet land.