The geometry constraint is slow, but more importantly it is *non-deterministic* - as in, it could produce different results across multiple runs, without telling you about it.
As a solution to both this and your performance concerns, I might recommend using a pointOnSurface, follicle, or something like it, to constrain your wheels. As each wheel has a fixed offset from the ground (i.e. the radius), you could simply constrain the transform and offset it by this value. Performance, especially when using a follicle, should barely be affected.
I did this once in the past on wheels for a series of bicycles. If you are also looking to have your wheels deform on ground contact, you could simply offer the animator an "offset to the offset" where this delta is connected to a deformer of sorts - such as a child lattice of each wheel.