Brown the meat: In a large pot or Dutch oven over medium-high heat, brown the ground beef and sausage with the onion, breaking it up as it cooks, about 7-8 minutes, until no pink remains. Drain off the excess grease.
Bloom the garlic and paste: Stir in the garlic and tomato paste and cook for 1 minute until fragrant.
Build the broth: Stir in the crushed tomatoes, tomato sauce, beef broth, Italian seasoning, salt, pepper, and red pepper flakes if using. Bring to a boil.
Cook the pasta in the pot: Stir in the pasta, reduce the heat to a simmer, and cook uncovered for 10-12 minutes, stirring occasionally, until the pasta is tender.
Wilt the spinach: Stir in the spinach and cook for 1-2 minutes, just until wilted.
Mix the ricotta topping: While the soup simmers, stir together the ricotta and parmesan in a small bowl.
Serve: Ladle the soup into bowls and top each with a dollop of the ricotta mixture and a sprinkle of mozzarella.
Notes
Cook the pasta directly in the tomato broth so it thickens the soup as it soaks up flavor. Brown the beef and sausage to 160°F before draining.