If you think about it, the cellular networks are really pretty inefficient.
Every carrier requires their own towers (to the extent that colocation of antennas on a tower doesn't fit their network footprint), radio frequencies and extensive backhaul networks. Carriers leverage this to create anti-competitive incompatibilities and lock-in that makes switching carriers hard to impossible and raises the costs to handset makers through extensive handset model splits to support their differing frequencies or intentional incompatibilities.
The general amount of duplication is ridiculous and painful on the spectrum side since increasing data consumption requires more spectrum and/or more towers at lower radio power to allow for subdividing cells as density and usage increases. And they're not making more spectrum, especially in the more useful lower frequencies.
The ways I can think of to fix this all involve regulation, but maybe its needed. Signalling seems to be converging on LTE and maybe the FCC could consider a mandate for network interoperability -- ie, a single radio signalling protocol that all carriers had to support combined with a "must carry" rule that required any tower to allow any handset on any carrier to use it with some back-end settlement process so that carriers with less backend would have to pay for carriage they didn't provide back-end for.
Phones would be built to handle all radio frequencies, so depending on signal strength and geography, they would associate with the "best" tower not necessarily a "home" tower, balancing out any existing overlap in coverage to reduce the amount of cell subdivision required in built-up areas and encourage development of poorly served areas.