On the other hand the limit set by MAX_MONEY is very close to what will be available in circulation while 10,000 is far from 123 years or 130 years.
Well, remember that MAX_MONEY is NOT defined as 21000000.
It is defined as 21000000 * COIN
Since COIN is defined as 100000000, that makes MAX_MONEY = 2100000000000000.
The actual number of integer units that will be created is less than 2099999997690000.
This means that MAX_MONEY is off by 2310000 (2.31 million!).
I also think its fine to say there will be almost (see your own list for more) 21 million coins.
On this we agree.
Also wouldnt it be possible to increase the precision which determines how much bitcoin (or rather satoshi in the future) will be generated. E.g. use 128, 256, 512, etc. bit integer instead of 64 bit integer. So instead of setting the reward to zero [1] it would be fractions of a satoshi... while AFAIK we still wouldnt reach 21 million coins in finite time the difference would be infinitesimal small. I think it would require a fork though, as "old" clients wouldn know how to handle .1 satoshi.
This would be a forking change. Not only would "old" clients not know how to handle 0.1 satoshi, but to end up with a different total, you'd have to change the defined value of COIN or in some other way alter the size of nSubsidy. All of the block rewards would have to become a larger number of integer units and you'd have to interpret transactions in the blockchain differently depending on whether they occurred before or after the block where the new definition was first accepted.
Having a larger integer
type while still storing the exact same integer in it wouldn't change the total amount of bitcoins created.