If miners care for the network’s health, they should stop mining when transaction volume is low. Because ultimately the network is capable of handling 2016MB worth of blocks every two weeks, regardless of when they are created, so squander blocks when there are not enough transactions? Thus to increase reliability miners should create more blocks when transaction volume is high (and fees are high), and reduce the number of blocks when there is less demand. Which in turn also saves power(!). It is pretty obvious that this is better for Bitcoin as a whole, but what is not obvious is how you get miners to turn off their profit making machines for any given time.

The solution is simple: Blocks without enough fees, or which are mined too quickly get orphaned. You only need a majority of miners to enforce these rules, as they see how it increases network health and saves power, and thus increases their long term profits.

Now, this idea only needs some kind of deterministic way to calculate the ideal minimum fee / block-times to orphan, and we are set.

Btw, it might be true that this system would naturally occur already when rewards get taken over by fees only. As miners would already have the incentives to stop when fees are low. Therefor a system which forgoes ALL mining rewards via soft-fork might be the easiest way to implement this soft-fork ;).

Another idea is to divide all mining rewards towards previous blocks by ratio of the fees they contain. Although that would encourage miners to add fake transactions with high fees to their blocks.