Both salvagewallet and zapwallettxes are often much more rough than needed, when recovering from bad wallet state.
How about an RPC/option that only removes unconfirmed transactions from the wallet? Doing so wouldn't even require any rescan afterwards.