Add 1 tablespoon olive oil to a large pot and heat over medium heat.
Add 1 cup diced onion and cook for 2-3 minutes until softened. Add 4 minced garlic cloves and cook for another 30 seconds until fragrant.
Add 1 lb lean ground beef to the pot, breaking it up as it cooks using a ground beef masher or a wood spoon. Cook for 5-7 minutes until browned and cooked through.
Stir in 3 oz tomato paste, 1 tablespoon Italian seasoning, 1 teaspoon salt, and ½ teaspoon ground black pepper. Mix everything together and cook for 1-2 minutes.
Pour in 4 cups beef broth, 15 oz canned diced tomatoes (with juices), 15 oz canned tomato sauce, and 1 cup water. Stir to combine.
Add 8 oz uncooked bowtie pasta to the pot. Make sure the pasta is fully covered with the liquid. Bring to a boil, then reduce the heat and let it simmer for about 10-14 minutes, stirring occasionally to prevent the pasta from sticking together. If needed, add more liquid in small amounts to keep the pasta covered.
Stir in ½ cup ricotta cheese, ½ cup shredded parmesan, ½ cup shredded mozzarella, and 1 cup baby spinach. Cook for another 1 minute, allowing the spinach to wilt and the cheese to melt into the soup.
Ladle the soup into bowls. You can add optional toppings like a dollop of ricotta cheese, a sprinkle of chopped fresh basil, and additional shredded parmesan cheese, if desired.