proposed in 2020 in DelvingBitcoin
You read "May 20" as 2020, but it is "May 20, 2025", if you hover your mouse over it. This idea is quite recent.
UTXOs are stored in the UTXO set for a full halving period.
Why there should be any time limit at all? I think instead of UTXO expiration, it should be something like "UTXO hashing and pruning" instead. Which means, that if you have a tree of all existing UTXOs, you can locate each of them in a merkle tree of transactions. Which also means, that for every existing UTXO, you can provide the block header hash, in which it was created, the merkle root, and the whole path, from that merkle root, into a given transaction. And then, inside a transaction, there are SHA-256 chunks, with Initialization Vector, and partial hashes, which you can get from running SHA-256 on top of a given 512-byte data chunk.
Which means, that there is no need for UTXOs to expire. If a given user can provide a proof, that a given coin is spendable, then that user could potentially reveal such data even after decades, because why not. The only limitation would be then the cost of spending a given coin. And then, nodes can only have the minimal information about UTXO tree, enough to remove old entries, and add a new ones, but they won't need to store everything, and that duty can be moved from nodes to users, where each user would care about its own coins, just like they keep their private keys.
hodlers holding coins for more than 4 years would have to pay a little bit more transaction fees for the OP_RETURN output to be able to move the coins
All proofs should live in a separate space, unrelated to the existing transaction structure. This property is needed, because you may have some timelocked transaction, or some multisig, and you don't want to lose it, if another party will not be there. Which means, that it should be something like witness for legacy nodes: an additional transaction data, which is ignored by the current version, but required to be there by new nodes. I usually call it "commitment space".
One could even create a pruning mechanism for these UTXOs, similar to OP_RETURN pruning.
Note that pruned node can be "unpruned", by downloading data from peers. Which means, that if the UTXO set is hashed, then it should be possible to "unprune" things, by importing proofs, that coins are there (even without having any signatures, which would allow them to be moved somewhere else).
I don't feel knowledgeable enough to propose this on the mailing list and may suffer from Dunning Kruger's a bit
I guess some content like that is likely to be accepted on the mailing list. I think you are close to reaching the level, where your posts would be published there. You can always try, in the worst case, they will tell you to go back to the forum, but I think it wouldn't be the case.
But if you want to write something there, then note one thing: starting a new topic on the mailing list is discouraged. If you reply to someone else's post, then your chances of getting through moderation are increased. Which means, that if you have some new idea, then on bitcointalk, it is obvious to start a new topic. But on the mailing list, it would be better, if you would place your reply under the old topic of Tadge Dryja, or anything else, what was accepted in the past.
Why? Because each topic on the list is traced separately. If you quote someone, and write a reply, then it is usually on-topic, and it is accepted. But if you start a completely new topic, then you need to justify, that talking about this new thing is worth discussing. And if your initial post won't do so, then it may be rejected.
Was such a thing already discussed perhaps?
Well, as you can see, there is also Delving Bitcoin. It is more similar to forum, because then, your posts are accepted first, and may be removed later. So, you can start on Delving, if you are worried about starting with the mailing list. Because it definitely meets "Delving level" in my eyes, but it may not meet "mailing list level" yet, especially if you won't quote anything from the past, and start a new topic, then it may be rejected.
Edit: Another reason to not set any timestamps, like "4 years", is that the current pruning level is arbitrarily chosen by node operators. Someone can run it with "prune=550", someone else with "prune=210000", and at the end of the day, it is not related to "how much time passed", but rather "how many bytes it took". Which means, that it seems quite reasonable, to connect UTXO pruning with existing block pruning. If you can see the last 288 blocks, then any UTXOs below that level, are unreachable for your node. So, you could have "prune=550", and "pruneutxo=210000" in your config, and decide, how much space are you going to allocate for the UTXO set, before you will start hashing that content, and keeping only the hash of some database entries, instead of keeping everything.