All of these solutions are great as long as you are open to overload your functions. I would personally overload the function; however, if you persist to use only one function then I highly recommend you to use Code Contracts to enforce any logic you desire to any combinations of parameters. Here is an example:
public string XYZ(string dobFormatted, string infodateFormatted,
string BSN = "", string insuranceID= "", string lastname= "",
string postalcode = "", int Homenummer = 0, string Homenummeradd = "",
string insuranceType = "Both")
{
Contract.Requires(!string.IsNullOrEmpty(dobFormatted) || insuranceType == "NONE");
}
You can have as many as Requires() functions as you want. You can enable the static check for Code Contracts and compiler can warn you when you are jeopardizing your constrains.
Visit http://msdn.microsoft.com/en-us/library/dd264808.aspx for more information.
Remember you can use Code Contracts even in your overloaded functions.