Heat 2 tablespoons oil in a 5- to 6-quart pot over high heat until hot but not smoking, then cook onions, garlic, celery, and carrots, stirring occasionally, until onions are pale golden, about 4 minutes. Stir in broth and water and bring to a boil, covered.
Meanwhile, heat remaining 2 tablespoons oil in a 12-inch heavy skillet over high heat until hot but not smoking, then sauté meatballs (do not thaw if frozen), turning occasionally, until browned all over, about 3 minutes.
Add meatballs to soup along with beans and briskly simmer, covered, stirring occasionally, until vegetables are tender and meatballs are heated through, about 15 minutes.
Stir in spinach, cheese, salt, and pepper and simmer, uncovered, until spinach is wilted, about 1 minute.