How can divide by 2 blocksize bubblesort followed by a final mergesort be optimized in a particular environment?
The normal way to tell is through measurement: we try different choices for the threshold, benchmark each one, and choose the best.  This can be tricky, as the best threshold might vary from computer to computer (depending on, e.g., the relative speeds of CPU vs RAM, the size of various caches, and so on).  So, a plausible approach might be to benchmark on multiple different platforms and then choose one threshold that seems to do ok on most of them.

Asymptotic running time analysis probably won't be very helpful, because the constants matter a lot; and because the cache/memory hierarchy probably matters a lot, and standard running time analysis doesn't model the memory hierarchy very well.