On any IP header, the first 4 bits are reserved for protocol version. So theoretically a protocol number between 0 and 15 is possible:
4: is already used for IPv4
5: is reserved for the Stream Protocol (STP, RFC 1819) (which never really made it to the public)
So the next free number was 6.
During the design of IPv4, people thought that 32 bits were enough for the world. Looking back into the past, 32 bits were enough until now and will perhaps be enough for another couple years. However, 32 bits are not not enough to provide each network device with a global address in the future. Think about mobile phones, cars (including electronic devices on its CAN-bus), toasters, refrigerators, light switches, and so on...
So designers have chosen 128 bit, 4 times more in length and 2^96 in size than in IPv4 today.
But the usable size is smaller than it may appear, because in the currently defined address schema, 64 bits are user for interface identifiers. The other 64 bits are used for routing. Assuming the current strict levels of aggregation (/48, /35, ...), it's still possible to “run out” of space, but surely not in the near future.
Well, there is one (or more?) people on the Internet who think about IPv8 and IPv16, but their design is far away from acceptance and implementation.
128 bit was the best choice regarding header overhead and data transport. Think about the minimum Maximum Transfer Unit (MTU) in IPv4 (576 octets) and in IPv6 (1280 octets), the header length in IPv4 is 20 octets (minimum, can increase to 60 octets with IPv4 options) and in IPv6 is 48 octets (fixed). This is 3.4 % of MTU in IPv4 and 3.8 % of MTU in IPv6. This means the header overhead is nearly equal. More bits for addresses would require bigger headers and therefore more overhead. Also think about the maximum MTU on normal links (like Ethernet today): it's 1500 octets (in special cases: 9k octets using Jumbo frames). Ultimately, it wouldn't be a proper design if 10 % or 20 % of transported data in a Layer-3 packet were used for addresses and not for payload...