In a large bowl, combine the beef, Worcestershire sauce, egg, egg white, breadcrumbs, Parmesan cheese, 2 tablespoons parsley, 1 teaspoon salt, and ½ teaspoon black pepper. Use your hands to mix everything together, being careful not to over-mix. Form the meat mixture into small balls that are about ½ tablespoon each (I get about 60 balls), and set aside.
In a 5-quart pot with a lid, heat the olive oil on medium heat. Add the carrots, celery, and onion and sauté until starting to soften, about 5 minutes, stirring occasionally. Add the garlic and sauté another minute.
Add the water, diced tomato, tomato paste, bay leaves, dried Italian seasoning, remaining 1 teaspoon salt, and remaining ½ teaspoon black pepper. Cover the pot, turn the heat up to medium-high, and bring up to a boil. Turn down to a simmer and cook (covered) for 15 to 20 minutes, stirring occasionally.
While the soup simmers, cook the pasta in a separate pot to al dente according to the package directions. Drain and set aside.
Add the meatballs to the soup, bring the soup back up to a simmer (with the lid slightly ajar), and cook for 10 minutes more.
Turn off the heat and stir in the cooked noodles and the remaining 2 tablespoons parsley.
Serve garnished with Parmesan cheese if desired.
Notes
Storage: Store leftovers in an airtight container in the fridge for up to 4 days or in the freezer for up to 6 months.
The Pasta: I used O-shaped pasta (it’s called rings at my grocery store).
Cooking the Pasta Separately: When I make pasta for soup, I typically cook the pasta in a separate pot and then add it to the soup once it’s cooked and drained. Otherwise, I find that the pasta’s starch can make the soup much too thick.
Reheating: If the soup is left to sit for a couple hours before serving or if you have leftovers, it will thicken quite a bit because the pasta absorbs the liquid. To reheat, you can thin it out a bit by adding more water or tomato sauce and heat it in a saucepan on the stovetop or in a microwave-safe bowl in the microwave.