You cannot make the storage cost depend on gas price, or miners can bloat the state at will. You could have a consensus-determined (in ether, not gas) cost per slot, then bill it as a variable amount of gas in order to use that accounting mechanism.
The alternative is to charge the sender for storage slots separately, in which case they need some way to specify the most they’re prepared to pay.
There’d still be a gas cost for the opcodes themselves, but refunds are in ether, not in gas. There’s no DoS vulnerability, because it doesn’t allow you to increase the total amount of work done in a block.