There is a very simple and elegant way to solve this problem. You need to enter a minimum fee amount.
It is a very lazy solution that only causes more problems than it solves.
For starters what would the minimum fee value be? Lets say the coin is worth $0.01 you hardcode the minimum to be 0.01X (X is the coin). Now price goes up to $10 and the minimum fee of that coin is suddenly 10 times more at $0.1, then it goes up to $100 and fee reaches $1 and so on.
Your solution simply added mandated hard forks each time there is a big price rise to reduce the minimum fee.
You just haven't tried it yet. Everything is known by comparison.
Managing the fee through the block size:
If there are few transactions, the fee is sharply reduced, to cents. If there are a lot of transactions, the fee increases dramatically, up to $10. That is, it can change 100 times. And in a very short time - in a day, 2.
As I wrote above, this is a bad way, because it constantly causes inconvenience to bona fide users.
Minimum fee management:
The fee is set in satoshi and, let's say, changes every 2 weeks. What is a change algorithm is a topic for discussion. Now the price does not change dramatically by 10 times. The recent sharp increase is just a 2-fold increase in 2 weeks. It's not that bad. Instead of 10 cents - 20 cents, instead of $ 1 - $ 2 - not terrible, against the background of the current $10.
As for hard forks. Since this is adding restrictions, you can theoretically do with a soft fork. Possible, You may need one hard fork.