Perhaps a P2SH timelock or Multisig would be a more suitable alternative [...]
Yep. A CheckSequenceVerify-style timelock allows to get rid of the periodic renewals.
As it was not mentioned in this thread, I take the opportunity to promote again the (imo, very good) approach
invented by user Andriian which (s)he has even implemented in a
mobile wallet:
1. Create (offline, of course!) a transaction from your cold wallet with two if-else branches, without broadcasting it. The coins can be moved in two forms:
- With your heir's keys, but locked by CSV. Your heir can only use the coins if (s)he waits the time you defined (e.g. one year).
- With your own keys, at any time.
2. You print out this transaction to paper or save it safely digitally and give it to your heirs.
3. If you pass away, the heir can simply broadcast the transaction, and after the timelock expires, they can move the coins to an address they want.
4. If your heir broadcasts the transaction while you still are alive, or someone steals the transaction and broadcasts it, then you can simply transfer the coins to another of your addresses. (And if it was your heir who moved it, you may reconsider if they're really the person worthy of the coins.)
The advantage to the Locktime method is clear: you only need to renew the transaction if you move the coins or if the transaction was broadcasted earlier than expected. There may be minimally more trust involved, but practically your heir doesn't have any incentive to abuse of the transaction, as you always will have time to react if the CSV timelock is long enough.