A list can contain only one object at an index (though that object can be a list or a complex object, as in Mika's answer). One suggestion I have is
List<Tuple<string,string,string>> Foo = new List<Tuple<string,string,string>>();
Foo.Add(Tuple.Create"("Bar","Baz","Quux"));
//Or
Foo.Add(new Tuple<string,string,string>("Bar","Bax", "Quux");
Obviously this is less readable them Mika's suggestion, and it relies on the developer to get the order of the strings right each time. It does, however, fit your description better (but not 100%), so perhaps this is what you were thinking of.
One further suggestion (though it doesn't really match what you say) is a "3d list" (i.e. a list of a list of a list of strings):
List<List<List<string>>>
But again the first list contains a single item at each index, which just happens to be another
List
.
Finally, the code you saw could be an implementation of a generic class which wrappers up the type work up that are described in the various answers you've had so far. If this is the case, I'd have to question what
MySpecialGenericList[0] would mean, as it tecnically stores three strings, all of which are required to form the item, but only one can be returned without resorting to a tuple or complex object. Either of these return types are not the original thing passed in, so this would, in my view, be symantically incorrect.