This is probably going to get tricky whatever you do and is likely to need some manual intervention.
First take a backup copy of your file – always good practice.
I would suggest that you get something to pick out the last name only to start with by locating the last string in the field – you can ignore certain strings like JR and look for the string that precedes them. Use the string you found as the lastname field and remove this string from the fullname field.
You should now have a last name filled for all your records. Now you can create a list of records which still contain more than one string in the fullname field. These records will probably need manual intervention as it’s almost impossible to code for whether the person has two first names or two last names. The company names will most likely appear on the list as well.
I know this isn’t marvellous, but in this situation you can only code for so many combinations.