You've correctly identified a problem, but you've come to the wrong conclusion.
If you ask someone their name, a single field copes with a range of different name shapes.
If you want to address them in an email with "just first name", what you're really asking for is a preferred name to be greeted by, and that should be an entirely different single field.
By splitting or having "firstname/lastname" fields you're making the classic mistake about names.
Ask in the sign-up or user preferences their preferred way to be greeted in an email. If the user wants their marking emails to start "Dear shithead" then free them up to do that. You could try splitting the "full name" field to pre-fill a suggested name by which to be greeted.
Just going with the principle of the least amount of surprise here. This is simply what the vast majority of websites do because it's good enough. It doesn't offend any one too much. I'm well aware of the full range of complexity offered in e.g. the vcard standard. But dumping that on the user might not work out the way you want either. There are also some cultural differences of course with E.g. Asian people using their family name first instead of last.
But going with the number of fields: 1 is probably under-engineering it, 2 is probably enough, 3 would be a stretch. 4 or more is probably over engineering the problem (unless you specifically have a requirement for this).
I can throw one more curveball here that currently isn't really solved anywhere. Nameless people.
This situation arises when you know you want to travel after giving birth, and you want to book the tickets in advanced to take advantage of lower prices. Most airlines won't let you book a ticket without a name, nor do they let you edit names.
The situation is also relevant in hospitals where babies are born, in Finland they literally put girl <surname> / boy <surname> into the system as the first / lastname. It's quite funny that a place literally designed to handle new humans, does not have a way to handle that.
If you ask someone their name, a single field copes with a range of different name shapes.
If you want to address them in an email with "just first name", what you're really asking for is a preferred name to be greeted by, and that should be an entirely different single field.
By splitting or having "firstname/lastname" fields you're making the classic mistake about names.
Ask in the sign-up or user preferences their preferred way to be greeted in an email. If the user wants their marking emails to start "Dear shithead" then free them up to do that. You could try splitting the "full name" field to pre-fill a suggested name by which to be greeted.