In your particular example you can reduce $MaxExtraPrecision from 1000 down to about 400 and usually not have an error. That will save less than 25% of your time.
Since you seem to only be using the Abort if
Sign[f[a]]==Sign[f[b]]
and might not have any other reasons for Abort during your calculation you might be able to remove the CheckAbort and Abort and just test the two signs before beginning your loop, but changing that does not seem to save any significant time.
Your For loop is written in an unusual way and not like most you would see as examples. Unusual coding can sometimes take more time, but changing that does not seem to save any significant time.
Since you are doing bisection you will only reduce the width of the interval by 1/2 on each iteration. Since you want an interval of less than 10^-400 this will require many iterations and a long time.
If your function is smooth and well behaved then you might replace bisection with Newton or another method which more quickly converges and would require fewer iterations. That could still use the For that you require. That may be the best way to greatly reduce the time needed, but increasing the risk that a bad function would not converge with Newton.