You need a really good test for “bad” first names, and if you find one, you arbitrarily swap them… I’d think the only way to do this would be a table of names that you would want to switch, “SMITH” in your example below - if you find a first name in this table, you would switch.
The problem is names like mine, where your first and name is equally likely to be reversed (I get Doug a lot instead of Brent)… I’d lean toward letting names go thru rather than reversing them, so my check table would tend towards small.