This is more of a general CSS issue, where opacity will always affect the child elements. There isn’t a way to make it behave in the way you want.
You’d need to add the background to a seperate element (or psuedo element) and manually place it behind the content using position absolute and a lower z-index than the text, so it looks like a background image but actually you’re fading a seperate element.