Brown the sausage: In a large pot or Dutch oven over medium-high heat, crumble and cook the Italian sausage until browned and crispy, about 5-7 minutes. Remove with a slotted spoon and set aside, leaving about 2 tablespoons of drippings in the pot.
Sauté vegetables: If needed, add butter to the sausage drippings. Add onion, carrots, and celery. Cook for 6-7 minutes until vegetables are softened. Add garlic and cook for another minute until fragrant.
Make the roux: Sprinkle flour over the vegetables and stir constantly for 1-2 minutes to cook off the raw flour taste.
Add liquids: Slowly pour in chicken broth while whisking to prevent lumps. Bring to a simmer.
Add seasonings and cream: Stir in Italian seasoning, thyme, red pepper flakes (if using), salt, and pepper. Add the half-and-half and return the cooked sausage to the pot.
Cook the gnocchi: Add gnocchi and simmer for 4-5 minutes until they float to the surface and are tender.
Finish the soup: Stir in spinach and parmesan cheese. Simmer for 2-3 minutes until spinach wilts and soup thickens slightly. Taste and adjust seasoning.
Serve: Ladle into bowls and garnish with extra parmesan, fresh basil, and a drizzle of olive oil if desired. Serve with crusty bread.