For the meatballs:
2 eggs, lightly beaten
1/2 cup milk
1/2 cup breadcrumbs
1/2 pound ground beef
1/2 pound ground pork
3 medium cloves garlic, chopped
1 1/2 teaspoons kosher salt
Freshly ground pepper
1/3 cup grated parmesan
10 ounces frozen chopped spinach — thawed and squeezed very dry
For the soup:
2 tablespoons olive oil, divided
1 onion, chopped
3 carrots, peeled and sliced
3 celery, sliced
1 28-ounce can whole peeled tomatoes
6 cups low-sodium chicken broth
2 sprigs fresh rosemary
3 sprigs fresh thyme
2 tablespoons chopped fresh basil
1 teaspoon dried oregano
1 bay leaf
1/4 teaspoon crushed red pepper flakes
1 teaspoon kosher salt
Freshly ground pepper
1 parmesan rind, optional
1 medium turnip, peeled and cut into 1/2-inch dice
1 large Yukon gold potato, cut into 1/2-inch dice
Make the meatballs: Add the eggs, milk, and breadcrumbs to a large bowl; stir to combine. Add the meat, garlic, salt, pepper, parmesan, and spinach. Use your hands to thoroughly, yet gently, combine ingredients. With slightly damp hands, roll into about 40 one-inch balls.
In a large soup pot, heat 2 tablespoons olive oil over medium heat. Add meatballs, and cook, turning occasionally to brown all sides, until cooked through, about 8 minutes. You may need to work in two batches. (Don’t overcrowd the meatballs while cooking or they won’t brown nicely.) Transfer the meatballs to a plate.
Heat the same soup pot, over medium-low heat; add the onion, and cook until translucent, about 7 minutes. Add the garlic, carrots, and celery, and cook for 2 to 3 minutes. Add the tomatoes with their juice. Roughly chop the tomatoes with kitchen shears. Add the chicken broth, whole sprigs of rosemary and thyme, chopped basil, oregano, crushed red pepper, salt, pepper, and the parmesan rind. Bring to a boil. Add the turnip, potato, and meatballs. Bring back to a boil, then lower heat to a brisk simmer. Simmer uncovered for 45 minutes to an hour, stirring occasionally (or even longer — just use lower heat to maintain a very gentle simmer at this point).
When ready to serve, remove the rosemary and thyme stems (the leaves will have detached into the soup), the bay leaf, and the parmesan rind. Serve topped generously with the grated parmesan.