Caniuse shows about 95% support for filter which is pretty good.
You could use the @supports media query for the filter and for non supporting browsers use the pseudo element method to shim a partially opaque background over the top of the image.
If you apply pointer-events:none to it then it won’t interfere with anything.
That’s just a couple of thought off the top of my head