I don't see anything to speed this up.
On my notebook it takes around 5.4 seconds,
of which 3 seconds are in `fit` (mainly pinv, I guess) and a bit over 2 seconds in patsy dmatrices.
(when I tried method="qr", it was even slower than default pinv)
There would be a large speedup in repeated estimation if exog stays the same and the pinv_wexog can be reused.
If both endog and exog differ across cases, then I don't see a possible speedup.
Treating c2 as continuous, reduces time to around 1.7 seconds on my computer.
Josef