Heat olive oil in a large pot over medium heat. Add the diced onion, carrots, and celery, and sauté for 5 minutes, stirring occasionally, until the vegetables begin to soften and release their flavors. This foundational step develops sweetness and depth in the broth. After 5 minutes, add the minced garlic, dried thyme, black pepper, and red pepper flakes, stirring constantly for about 1 minute until fragrant—this blooms the spices and prevents them from burning.
Add the ham chunks, white beans (drained and rinsed), chicken stock, and bay leaf to the aromatic base from Step 1. Stir well to combine and ensure the bay leaf is submerged. Bring the mixture to a boil over medium-high heat, then reduce the heat to low, cover with a lid, and simmer gently for 20 minutes. This allows the flavors to meld together while the beans absorb the savory ham and broth flavors—I find that gentle simmering keeps the beans intact rather than falling apart.
Remove the lid and stir in the chopped kale, cooking uncovered for 5-8 minutes until the kale is tender but still vibrant green. Remove from heat and stir in the fresh parsley and lemon juice—the brightness of the lemon juice cuts through the richness of the ham and cheese, balancing the soup beautifully. Taste and adjust seasoning as needed. Ladle the soup into bowls and top generously with grated Parmesan cheese before serving. I like to add the lemon juice at the very end because it brightens the flavors without any cooking time dulling its punch.