It seems to me that you guys should not be using the ECC scalar multiplication function at all, just a very fast, totally optimized "increment by G" function:
Initialization:
Set BitcoinAddresses[256] = the list of bitcoin addresses from the transaction, binary form without the checksum
Set BitcoinAddressIndex = 0;
Set PrivateKey = 1;
Set PublicKey = G;
Loop Until BitcoinAddressIndex == 256: // == "forever"
Call Convert PublicKey to BitcoinAddress [but just to the binary form, do not encode or calculate the checksum]
If BitcoinAddress == BitcoinAddresses[BitcoinAddressIndex] Then
Log BitcoinAddressIndex, PrivateKey, PublicKey, BitcoinAddress
Create transaction and claim Bitcoins if any available at BitcoinAddress
Endif
++PrivateKey;
Call Increment PublicKey by G // Highly optimized, very specialized function to just compute PublicKey = PublicKey + G
EndLoop
This algorithm, when optimized, and split up so that many loops could be done in parallel, is as fast as it can be done.
Note on the PublicKey to BitcoinAddress conversion function:
You only need to do the first 3 of the 9 steps in this process.
1 - Take the PublicKey and format it properly (add the 1 byte of 0x04, change to compressed form if needed)
2 - Perform SHA-256 hashing on the result
3 - Perform RIPEMD-160 hashing on the result of SHA-256
This result can be compared directly to the BitcoinAddresses[] array assuming you have stored the 256 Bitcoin addresses in the proper binary form.
Not sure a miner would help as it only does one of the steps in the PublicKey to BitcoinAddress conversion.
Of course an FPGA could be programmed to do this. And, of course, if you had the resources an ASIC could be made to do this.
Final note on the BitcoinAddresses[] array values:
To get the proper values for this array simply undo the last 6 steps of the PublicKey to BitcoinAddress function for each of the 256 Bitcoin addresses in the transaction:
1 - Decode the base58 string to a binary byte array
2 - Strip off the 4 checksum bytes from the tail
3 - Strip off the version byte (0x00) from the front
4 - Store the result in the array