Heat a large Dutch oven or soup pot over medium-high heat. Add Italian sausage and cook for 6 to 8 minutes, breaking it into small pieces, until browned and cooked through.
Carefully remove excess grease if needed, leaving about 1 tablespoon in the pot.
Add onion, celery, and carrots. Cook for 5 to 7 minutes, stirring occasionally, until softened.
Add garlic, Italian seasoning, thyme, smoked paprika, and red pepper flakes if using. Stir for 30 seconds, until fragrant.
Sprinkle flour over the vegetables. Stir constantly for 1 minute.
Slowly add chicken broth, stirring well to dissolve the flour and scrape up the browned bits from the bottom of the pot.
Add diced Yukon Gold potatoes, salt, and black pepper. Bring the soup to a gentle simmer.
Reduce the heat to medium-low and simmer for 15 to 20 minutes, until potatoes are fork-tender.
For a thicker soup, mash some of the potatoes against the side of the pot with a potato masher or wooden spoon.
Reduce heat to low. Stir in milk, heavy cream, and cheddar cheese if using. Stir until the cheese is melted. Do not boil after adding dairy.
Add kale and cook for 3 to 5 minutes, or add spinach and cook for 1 minute, until wilted.
Taste and adjust salt and black pepper. Serve hot with your preferred toppings.