Make the meatballs. In a large bowl, combine the pork, egg, breadcrumbs, basil, garlic, salt, and Italian seasoning. Mix well, then with wet hands, form 1-inch balls about 1 tablespoon each.
Heat the olive oil in a large pot over medium-high heat. Working in batches, add the meatballs and cook, turning occasionally, until browned on all sides, about 8 minutes. Transfer the meatballs to a plate.
Add the onion to the same pot and cook, stirring, until translucent, about 4 minutes. Stir in the garlic and cook until fragrant, 1 minute longer.
Stir in the stock, water, salt, Italian seasoning, and crushed tomatoes. Stir in the meatballs, increase the heat to high and bring to a boil.
Stir in the pasta, reduce the heat to medium and cook, stirring often until the pasta is tender, about 15-20 minutes.
Ladle the soup into bowls and top with basil, Parmesan and red pepper flakes, if using.