What is the most efficient way to dynamically add a component, based on a string passed in.

At initialization, I want to dynamically create a large list of game objects. I will be attaching one component to each object from a set of possible scripts (all of which inherit from the same base class). An XML file will be read to tell me which script to attach for each object. What is the most efficient way to this?

Rather than having a long list of if-else-ifs

if(type == "type1")
{
gameObject.AddComponent<typeOne>();
}
else if(type == "type2")
{
gameObject.AddComponent<typeTwo>();
}
else if(type == "type3")
{
gameObject.AddComponent<typeThree>();
}

My initial thoughts are to use a look-up dictionary [string, System.type]. Is the optimal, or any other ways to approach this problem?

Your initial idea sounds perfectly fine to me. A dictionary seems a sensible way to approach this, so I would go with that.