Correcting two-bit error using a CRC
One approach: Use a meet-in-the-middle algorithm.  Build a precomputed table that stores $T_i = x^i \bmod P(x)$ for all $i$ up to the maximum message length.  Now, given $S$, you are looking for $i,j$ such that $S = T_i + T_j$.  This can be found by enumerating all $i$, and for each $i$, computing $S-T_i$ and checking whether it is present in the precomputed table.

The running time is proportional to the maximum length of the message.  I'd imagine that in a real deployment, two-bit errors will be rare enough that this running time is affordable.  (If two-bit errors are common, then three-bit errors will have non-negligible probability, which is a problem of its own.)

If you want to reduce space complexity, instead of storing the entire precomputed table and looking up $S-T_i$ in the table, compute the discrete log of $S-T_i$ for each $i$ using whatever method you prefer (such as the one you listed in your question).

I don't know if there are smarter methods that exploit the structure of $\mathbb{F}_2^{32}$ in a more intelligent manner.