Heat olive oil in a large pot over medium-high heat. Add sausage and break into chunks, cooking until browned, about 5-6 minutes. Remove from the pot and set aside, leaving the rendered fat in the bottom.
Add more olive oil if needed, followed by the diced onion, bell peppers, carrots, and celery with a large pinch of salt. Cook until the veggies are beginning to soften, stirring occasionally, for about 6-8 minutes.
Add 3 tablespoons of tomato paste, the garlic, 1 tablespoon of Italian seasoning, 2 teaspoons of fennel, and 1-2 teaspoons red pepper flakes (to taste) and sauté stirring often to prevent burning until the tomato paste has deepened in color (about 3 minutes) and the garlic is fragrant.
Pour in 5-6 cups of chicken broth, the basil, the tomato sauce, and diced tomatoes. Add a parmesan rind if you have one, and return the cooked sausage to the pot. Season to taste with salt.
Bring to a simmer then cover, reduce heat to medium-low and let simmer 5 - 10 minutes until the veggies have softened.
Meanwhile, bring a large pot of salted water to a rolling boil for the pasta. Cook the pasta 2 minutes under the package directions for al dente. Drain, and set aside. We like to cook the pasta separately to help it avoid getting soggy in the soup.
After the soup has simmered for a while, reduce the heat to low, and add in the optional cup of half and half, and 5 ounces of spinach. Cover and let simmer, stirring occasionally to wilt the spinach. Do not let the soup boil. After the spinach has wilted, remove from heat. Adjust seasonings to taste.
Add the cooked orzo to serving bowls, then ladle in the soup. Serve warm, top with ricotta cheese, parmesan, and fresh basil if desired. Enjoy!
Store leftovers in an airtight container in the fridge for up to 5 days. Store the pasta separately from the soup to prevent it from getting soggy.