The way I explain this is that the name on the booking is primarily there to assure the check-in agent that the person trying to check in for the flight is the same as the name on the ticket. It's better if the names match but they don't have to, especially for legacy airlines like BA where their antiquated backend booking systems can do a good job of mangling names. Low cost carriers with more modern booking systems can be less pragmatic about names not being an exact match.
What does really need an exact match is API data for the document that will be used to assert their entry at the destination. Whilst airlines try to get passengers to submit this in manage my booking systems, it can be provided at check in, and the simplest way will be for the check in agent to swipe the machine readable part of the passport.