Heat a large dutch oven or stock pot over medium-high heat. Add 2 tablespoons of the butter and the ham to the pot. Cook until the ham is browned all over. Using a slotted spoon, remove the fried ham from the pot, retaining the drippings.
To the drippings, add the remaining 2 tablespoons of butter, onion, carrot, celery, garlic, salt, and pepper. Reduce the heat to medium and sauté until the vegetables are tender and the garlic is fragrant.
Add the broccoli and sauté for an additional 5 minutes.
Add a little bit of the chicken stock to the pot to deglaze. Scrape up and mix in any bits that are stuck to the bottom of the pot.
Add the remaining chicken stock to the pot, bring to a boil and then reduce the heat to simmer. Simmer for 10 minutes.
Mix in the heavy cream and simmer for 10 additional minutes.
Stir in the cheddar and parmesan cheeses and stir until melted. Let simmer for an additional 20 to 30 minutes.
Add the ham to the pot, retaining some for garnish.
Use an immersion blender to puree the soup to your desired consistency. You can skip this step for a brothier soup, with larger chucks of vegetables.
Garnish with cheddar and reserved ham before serving.