So instead of giving a % of the block reward to the nodes,
While that would be a good idea, that is unfortunately the way Bitcoin currently operates. Working now, and ofr the foreseeable future. There seems to be no fatal flaw in this.
we rely on their altruism to keep running
Not exactly. If you don't run a node, you are incapable of making trustless transactions on the blockchain. It is not altruism that causes one to run a node, it is enlightened self-interest.
expensive servers for free,
Expensive servers? Don't be ridiculous. I run a full node on a computer I bought years ago for under 0.3 BTC ($300). While using that computer for other tasks as well. Sure, at some point in the future I may need to upgrade. But 0.3 BTC is not an inordinate amount to expect someone to spend to be a first-class member of the network.