Pour oil into a 12-inch frying pan (with 2-in.-tall sides) or a 5- to 6-quart pan over medium-high heat. When hot, add shallots, ginger, and garlic and stir often until shallots are limp, about 5 minutes. Stir in coconut milk, curry paste, brown sugar, and soy sauce. Bring to a simmer.
Stir in sweet potatoes; reduce heat to maintain a simmer, cover, and cook for 5 minutes. Gently stir in catfish, cover, and cook until sweet potatoes are tender and fish is opaque but still moist-looking in the center (cut to test), 8 to 10 minutes longer.
Gently stir in cabbage and cook, uncovered, until limp, about 5 minutes. Stir in spinach, cilantro, and lime juice and serve immediately.