So, here are two assumptions that I think are built into your question.
The manufacturer is writing on the keys with only a finite, or perhaps countable alphabet of symbols.
The manufacturer can only fit a finite number (maybe unboundedly large) of symbols on each key.
If assumption one fails, then you could just give each real number a symbol, and be done with it.
If assumption two fails, you could name each real number by its perhaps infinitely long decimal expansion.
If both assumptions hold, then the answer is "They can't". This is because, as Cantor proved a while back, there are uncountably many real numbers. But there are only countably many finite strings of symbols over a given finite (or countable) alphabet.
The manufacturer's best bet, if they want to do this systematically, might be to write on each key a computer program that prints out the decimal representation of the real number that key is supposed to produce. This would get you the computable numbers, a larger set of reals than just algebraic numbers plus common transcendentals like π. But, there remain some reals with names that can't be represented this way, like Chaitin's Ω, so this still isn't optimal.
However, there is no optimal solution. Suppose there were. Then we could add a key which said "the real whose first digit is the first digit of the alphabetically least real from the old keyboard, plus one (or minus one, if the first digit is 9), whose second digit is the same as the second digit of the alphabetically second-least real from the old keyboard, and so on", and in that way add a key which denotes a real not denoted by any key on the first keyboard (it can't be denoted by the first key, because it differs in the first digit from that real, it can't be denoted by the second, because it differs in the second digit...). So, since we've added a key, the original keyboard was not optimal. Contradiction, and our assumption must have been false.
I'm slightly fudging things for simplicity in the previous paragraph by pretending that decimal representations are unique. But you could run the same argument but on a scheme where they are unique by using e.g. continued fractions.