The fix is very easy: forbid fast-forward merges, and then you can always revert the merge commit of particular feature branch.
As for cleanliness of history, everything should be as simple as possible, but not simpler. Squashing and rebasing is destroying history, which often could be valuable, as OP shows.