One possibility is to have contracts by default have a mechanism where if they have less than 1 year of TTL left, any call to them must pay up to bring the TTL back to 1 year. This would just look like an extra transaction fee, and would have the property that a contract only hibernates if it is literally left unused for an entire year.