A confusing API is the eternal bane of library consumers. Make it easy, even trivial, for people to decide exactly what they want to do given the interface you provide. If they must pick from a lengthy list of overloaded functions, that's probably too much cognitive overhead. Also, it's worth noting that C# 4 will have support for optional and named parameters, so your System.Missing
problem will go away by itself.
Is it frowned upon in terms of OOP?
OOP favors the Single Responsibility Principle, or SRP. If you have a single class with many of these functions, each having many overloads, that suggests that it may be doing too much.
Does it decrease in efficiency?
If you have a lot of overloads for the same method, it takes longer to statically resolve each function call (i.e., "which method with this name is the right one?"). But that's not going to have a runtime impact on performance if they're nonvirtual calls -- that is, where the compiler can statically know exactly what type something is going to be. Either way, though, I don't think that should be your motivating factor here.