Preheat oven to 375 degrees. Spray a 13 x 9 inch baking dish with non-stick spray.
Cook the rice according to package directions. When done, leave covered to keep warm and set aside.
Steam the broccoli to almost tender. It will continue to cook once it is in the oven. You want the broccoli to still have a bit of a bite to it, not mushy. Once cooked, drain, and keep covered, set aside.
Mix together in a small bowl the Panko bread crumbs and 2 tablespoons melted butter. Set aside.
While the rice and the broccoli are cooking, heat 4 tablespoons of butter over medium heat in a large skillet. Add the onion and saute until clear, about 3 – 4 minutes. Add the garlic and let cook another minute.
Mix in the flour and let cook one minute.
Slowly add in the milk (start with 3 cups), whisking constantly to get the lumps out and the flour mixture incorporated into the milk. Season with salt and pepper, to taste.
Whisk until it begins to thicken and then add the ham. Heat through. *At this point, you may need to add more milk (I usually add about one cup more) to thin out the sauce just a bit. It will keep thickening as it heats.
Once the ham is heated through, add in the broccoli and give it all a stir. Remove from heat.
In your prepared baking dish, spread out the rice and pour the ham and broccoli sauce mixture over the rice. Give it a little stir to allow the sauce to seep through the rice.
Top with cheeses and sprinkle with the butter-coated breadcrumbs. Bake for 30-45 minutes, until heated through and bubbly. If the bread crumbs start to get too brown, loosely cover with foil.