Holy smokes. I don't think I've ever seen it done with mod_setenvif before. The ordinary version uses mod_rewrite.
For starters, delete all
NoCase elements. If the referer is in the wrong case, it's fake and you don't want them. As a bonus it will make the whole thing run faster.
Why does this require four separate lines?
SetEnvIfNoCase Referer "^https?://www.mainwebsite.co.uk" good
SetEnvIfNoCase Referer "^https?://mainwebsite.co.uk" good
SetEnvIfNoCase Referer "q=cache:.*mainwebsite.co.uk" good
SetEnvIfNoCase Referer "translate_c.*mainwebsite.co.uk" good
It all boils down to
SetEnvIf Referer mainwebsite\.co\.uk good
You never want to say .* in the middle of a Regular Expression. Constrain it to the exact text that you're matching, or at least [^.]*
Have you ever tested the code? Does it work in principle? Throw together a few lines of html including a call to one of your images, and open the page locally. The referer will come through as something like "http://localhost/" and you should see the door getting slammed in your own face. (I just double-checked this to make sure it doesn't come through with a null referer. Yup, NO HOTLINKS graphic, loud and clear.)
Are those environmental variables used for anything other than authorizing images? If not, toss them inside the <FilesMatch> envelope so the server doesn't have to plow through them at every request. (The mod_rewrite version of the hotlink blocker works on this principle. If the request isn't for an image, you don't even need to evaluate the conditions.)