Transaction fees serve two purposes. They pay for the marginal cost of verifying, propagating and storing the transaction, and they pay for the amortized cost of hashing to secure it and all the other transactions. In this post I will focus on the former purpose.
Normally, a transaction's fee is paid once, but its cost in the requirement of every network node to download it and store it accrues forever, or at least until it is pruned. If it's of low value, it could stay unpruned forever, causing blockchain bloat. (It's also true that transaction fees are paid only to miners, while the cost is carried by all nodes; this can probably be solved by propagation incentivization schemes as in the
Red Balloons paper, and will not be addressed here).
I'm of the opinion that bandwidth and storage are commodities, and there is no problem with "blockchain bloat" as long as the person who wishes his transaction to be recorded pays for the resources consumed. However, the resources required depend on the amount of time the transaction remains unpruned, and the current fee model does not take account of that.
There is a simple way to change this. I'll assume for simplicity that transaction A has a single output, and the transaction can be pruned some time after the output is spent. When spending the output as the input of a future transaction B, it does not add its entire value to the the amount that can be sent in the outputs of B; rather, a "storage fee" is deducted, determined by the storage size of transaction A and the time that has elapsed since transaction A, and added to a long-term fee pool (similar to the one discussed
here, but with a much more gradual decay) which will be paid to future miners.
If the transaction is so low-value and old that the deduction is more than the value, it can be pruned and its value be added to the long-term fee pool. This prevents worthless transactions from being a burden forever.
There is some awkwardness in that the fee for storage is paid out not to those who stored it but rather future miners, but this is not as important as the fact that whoever consumed the storage resources pays for them for the benefit on the Bitcoin network at large.
Note that this is different from other proposals that depreciate or invalidate outputs, such as demurrage and coin recycling. The amount deducted is not proportional to the value of the output. Those who have a sizable life savings are not going to have it taken away from them - they can get it whenever they want, minus the appropriate storage fee. On the other hand, those who insist on keeping almost worthless outputs floating around will eventually see them discarded due to lack of interest. Because of this, I do not consider this an economic change of the kind that must never be done in Bitcoin. But if others disagree, this idea can still be used in an alt.
The actual fee paid will probably not be very large, since the commodities involved are fairly cheap. The exact proportionality constant can be either hardcoded (and changed once every few years to account for hardware advances and Bitcoin price appreciation), or adjusted with a dynamic system. There can also be a "grace period" of a year or so in which the fee doesn't accrue, so only exceptional cases of persistent outputs will be affected.