Jairo Arrieta scored twice for the Crew (14-11-6).
Danny Cruz scored on a penalty kick in the 65th minute and Jack McInerney tied it in the 86th for the Union (8-15-6), just before the Crew went back ahead.
Arrieta put Columbus ahead in the 44th minute off a service from the right side by Sebastian Miranda.
He added the second in the fifth minute of first-half stoppage time following a goal kick by goalkeeper Andy Gruenebaum, who had his first career assist.