Since Ehud got on his soapbox, I thought I'd get on mine as well.
When we use IP addresses, there are two distinct purposes they serve. The
first is the unique identification (EID) of a machine. The second is the
choice of the next hop for routing. If we could split the two parts into
separate address spaces, then the current 32 bit address space would be plenty
large for EIDs (if you went to 48 bits, then it would be hard to imagine it
ever running out.) If the route side of the address space was structured into
levels of hierarchy, then the total number of routes anyone would be required
to carry would also be far smaller.
Unfortunately, I have never seen an acceptable solution to discovering the
route path for a random host. It's a real pain, with lookups, tests and
redirects all over the place. If anyone has a solution to this that can scale
for the next 20-30 years, many people will throw flowers at your feet.
Until this happens, the number of bits only skews the balance. The tension
between addressing and routability is inherent in the dual use and will
continue to drive the allocation system and router design.