If you have MDS installed (SQL 2005 and up) you could handle case properly through regular expressions.
You would need to add a bit more to it to handle the mentioned "Van der Wilden" but it could be extended to even handle this as well.
CASE
WHEN mds.mdq.RegexIsMatch([First Name],'[A-Z]{1,}(\s|\-)[A-Z]{2,}',7)=1 THEN
UPPER(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)(\s|\-)','First',7),1,1))+lower(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)(\s|\-)','First',7),2,LEN(mds.mdq.RegexExtract([First Name],'(?<First>.*)(\s|\-)','First',7))-1))
+ mds.mdq.RegexExtract([First name],'(?<Sep>(\s|\-))','Sep',7) + SUBSTRING(mds.mdq.RegexExtract([First Name],'(\s|\-)(?<MI>.*)','MI',7),1,1)+ LOWER(SUBSTRING(mds.mdq.RegexExtract([First Name],'(\s|\-)(?<MI>.*)','MI',7),2,LEN(mds.mdq.RegexExtract([First Name],'(\s|\-)(?<MI>.*)','MI',7))-1))
WHEN mds.mdq.RegexIsMatch([First Name],'[A-Z]{1,}\s[A-Z]{1}',7)=1 THEN
UPPER(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)\s','First',7),1,1))+
lower(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)\s','First',7),2,LEN(mds.mdq.RegexExtract([First Name],'(?<First>.*)\s','First',7))-1))
+ ' ' + mds.mdq.RegexExtract([First Name],'\s(?<MI>.*)','MI',7)+'.'
ELSE
UPPER(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)','First',7),1,1))+
LOWER(SUBSTRING(mds.mdq.RegexExtract([First Name],'(?<First>.*)','First',7),2,LEN(mds.mdq.RegexExtract([First Name],'(?<First>.*)','First',7))-1))
END
,
[Last Name]=CASE
WHEN mds.mdq.RegexIsMatch([Last Name],'(\s|\-)',7)=1
THEN
SUBSTRING(mds.mdq.RegexExtract([Last Name],'(?<Maiden>.*)(\s|\-)','Maiden',7),1,1)+LOWER(SUBSTRING(mds.mdq.RegexExtract([Last Name],'(?<Maiden>.*)(\s|\-)','Maiden',7),2,LEN(mds.mdq.RegexExtract([Last Name],'(?<Maiden>.*)(\s|\-)','Maiden',7))-1))+
mds.mdq.RegexExtract([last name],'(?<Sep>(\s|\-))','Sep',7)+
SUBSTRING(mds.mdq.RegexExtract([Last Name],'(\s|\-)(?<Maiden>.*)','Maiden',7),1,1)+LOWER(SUBSTRING(mds.mdq.RegexExtract([Last Name],'(\s|\-)(?<Maiden>.*)','Maiden',7),2,LEN(mds.mdq.RegexExtract([Last Name],'(\s|\-)(?<Maiden>.*)','Maiden',7))-1))
Else
SUBSTRING([Last Name],1,1) +LOWER(SUBSTRING([last name],2,LEN([Last Name])-1))
END