Besides, how are you go to crack hash function? Hash is basically a function that maps some data of arbitrary size (usually orders of magnitude greater in size than the resulting hash) to data of fixed size. Therefore, "cracking" a hash would pose to you conceptually the same task as finding a private key having only a public one, i.e. you will have to check myriads of possibilities that give you the same hash. And which one are you going to choose?
In short, you can't crack a hash function
Of course you can. What is a hash function essentially ? It is a function f that maps a number in the set A = {0,...N-1} into the set B = {0,...M-1} where M << N ; f(n) = m.
The trick of a hash function is that the calculation of f(n) = m is rather simple, but that there's no way, given an m, to find an n other than by exhaustively trying all elements of A.
Given that M << N, there are essentially on average Q = N / M elements of A that map onto a given value of m.
If you find a way to find easily the set of these Q elements, given m, without having to scan over all of A, you have cracked the hash function.
Usually, a hash function is already considered cracked when you can easily find ONE SINGLE element of the inverse image of m, but a fully cracked hash function gives you all of them.
If on top of that, I'm able to search quickly in the set of solutions (for instance, if I can generate them in an ordered way), I don't have to run over each of the solutions, I have only logarithmic difficulty to search in this set of solutions the one that satisfies the conditions I need (for instance, the block header without nonce).
I can work backwards in the hashing tree towards those data points where I have liberty to change things, and search each time, logarithmically, whether a solution exists.
In fact, the solution set I would take would start from m = 0: infinite difficulty in bitcoin: the hash being zero !
Once I have the header solution set, I look (logarithmically) for those solutions that have the right previous block hash and a few other things that need to be fixed, and essentially look for those solutions giving a merkel tree hash and a nonce.
For a found merkel tree hash, I now apply the same technique where everything is fixed except the coinbase transaction: so I calculate backward a/the solutions for this coinbase transaction, imposing (searching) everything that is fixed in the coinbase transaction --> I find the/a solution with the/a right coinbase comment.
I've just produced a correct block with maximum difficulty ! This chain is unbeatable now, nobody can make a chain with more PoW ! My PoW is orders of magnitude bigger than what has ever been done on bitcoin.
Note that even if I fork off 100 blocks ago, the new chain where I orphaned 100 blocks has orders of magnitude more PoW, with a calculation that I can do on my PC, if I have:
1) a simple way to generate the ORDERED set of solutions n to f(n) = 0.
2) a quick way to search into that set without having to "enumerate" it ; that is: if I can generate "solution number p" in that set without having to calculate solution 1, solution 2, ....