Searching the forum on MSDN I finally found someone answering this question.
IProvideClassInfo has nothing to do with this like the link I gave states. The correct answer is to implement the ICustomTypeDescriptor interface in your objects. Most of the function implementations involve returning the result of the same function call on the TypeDescriptor object (shared/static functions). The GetComponentName result will be the bold part of the drop down. The GetClassName result will be the non-bold part. I'm not sure what the GetEditor function does but returning the TypeDescriptor.GetEditor result causes an infinite loop, returning Nothing/null seems to work.
I created a base class for all my objects that will go into the Property panel's drop down that implements all the functions where GetClassName returns Me.GetType().Name and GetComponentName returns Me.ToString()
It works great.