Detecting the subobject of a mesh

I have a mesh that has over a 3000 separate sub objects. (groups of polygons that dont touch the rest of the object)

As a single mesh, the mesh goes into the scene pretty fast. But the minute I break up each subobject into its own object, the game slows to a crawl.

Normally when you do a raycast, it detects the entire object that it hit. Is it possible to raycast so that it only returns the subobject that it hit?

That way I wouldnt need to break it apart.