Instead of signing all of a transaction's inputs with SIGHASH_ALL, sign just the first input with SIGHASH_ALL (to eliminate one form of malleability) and sign all the rest with SIGHASH_ANYONECANPAY. That dramatically reduces the amount of data that has to be hashed to compute signature hashes.
Benchmark results from my machine:
500-input, 1-output, ~100,000-byte transaction:
Time to validate 500 SIGHASH_ALL inputs: 0.342 seconds Time to validate 500 SIGHASH_ANYONE inputs: 0.277 seconds
5,000-input, 1-output, ~1-megabyte transaction:
Time to validate 5,000 SIGHASH_ALL inputs: 8.753 seconds Time to validate 5,000 SIGHASH_ANYONE inputs: 2.783 seconds