Add the ground beef and Italian sausage to a large Dutch oven or stockpot over medium heat. Cook, breaking the meat into crumbles, until cooked through and nicely browned. Transfer the meat to a paper towel-lined plate. Drain off the excess grease, leaving about 2 tablespoons in the pot.
Add the diced onion to the reserved drippings and cook for about 5 minutes, until softened and translucent. Add the garlic and cook until fragrant, about 30–60 seconds.
Stir in the red pepper flakes, dried basil, oregano, parsley, thyme, black pepper and salt. Cook briefly until fragrant.
Pour in the tomato passata and beef stock, stirring and scraping up any browned bits from the bottom of the pot. Return the cooked beef and sausage to the pot and bring to a boil.
Add the pasta, cover, and reduce the heat to a simmer. Cook, stirring occasionally to prevent the pasta from sticking, until tender.
While the pasta cooks, place the ricotta between several layers of paper towel and gently press to remove any excess moisture. Transfer to a bowl and add the mozzarella, Parmesan, salt, red pepper flakes and a few grinds of black pepper. Stir until well combined.
Once the pasta is tender, turn off the heat. Add the spinach and torn fresh basil and stir until the spinach is just wilted.
Add 1/2 cup of the three-cheese ricotta mixture directly to the soup and stir until the cheese has melted into the soup. Taste and adjust the salt and pepper as needed.
Ladle into bowls and finish each serving with generous dollops of the remaining three-cheese ricotta mixture. Top with additional Parmesan and fresh basil, if desired.