But, you will need to figure out where your million dollars a year comes from. Maybe you could require a renewal fee... oh, right.
And you'll need some mechanism to clear out useless garbage. For today's domains the renewal fee does that, but you don't want that fee, so... maybe you'll pay interns to look at each domain, weigh up whether it seems "active" enough and if not delete it ?
How does an intern guess whether some.example gets a lot of email? Sends a lot of email but with its return address listed? Is mentioned in Java package names for important software? Has a fun text adventure hidden in its DNS answers?
Oh they can't do all those things (and dozens of others I didn't think of) ? Then your service isn't fit for purpose or you must commit to keeping absolutely everything, forever, no matter what, which has unlimited cost.
You can also have the .com DNS servers see how often the domain is resolved. If it's not resolved for a year it should expire.
Or why you pay to have a telephone number
1) When the domain expires, it still remains active and still linked to the previous owner. People can still use it as normal.
2) When it expires, the price is set to a very high price for a few weeks. Anyone can buy it at the higher price. If no one buys it, it still remains active and linked to the previous owner.
3) If the previous owner wants to buy it back after it has expired, they just need to pay their original price (not the high price), provided that someone else hasn't already bought it.
4) At the end of the initial few weeks, the price drops a little and remains at this price for a few more weeks.
5) The price eventually drops to the regular price after many weeks.
6) At any time anyone can pay to extend the registration for another year.