to mine an endless number of blocks from minus infinity to -1
This is not how it works.
1. You have the current block height, in each and every coinbase transaction, enforced since BIP-34.
2. Even if you wouldn't have it, then still, a single block hash still commits to a single merkle root, so you would have a single coinbase transaction. If you change anything, then you have a different hash.
3. Even if you would find somehow a way, to maintain the same merkle root, and get different transactions accepted (which is doubtful, because we have duplicated txids, and it wouldn't duplicate anyone's wealth, but only burned some coins as a result), then still, each block header contains a timestamp, and it has to go forward, over a span of 11 blocks, so you cannot use the same time for every block, no matter if you go forwards, or backwards.
4. The Genesis Block is treated differently, than all other blocks. It is an exception in the code. But: every block needs a previous block hash, and you have to put something here. So, if you have block (-1), then which previous block it references? Obviously, you can put zero everywhere, but then, the code protects us from duplicated block IDs in the same way, as it protects us from duplicated transaction IDs: it is used to find this data, and it is treated uniquely. Which means, that both transaction IDs and block IDs are unique, so if your hash for block (-2) is the same, as your hash for block (-1), then you have only one coin.
Also, you can actually experiment with all of that, if you replace the original SHA-256 with some tweaked version, where for original data, you have original hashes, but for your specially crafted data, you have different, weak hashes. Just use a similar way, which was used to make hardened SHA-1, based on SHA-1, but in an opposite direction, and make weakened SHA-256, based on the stronger original. See topic:
https://bitcointalksearch.org/topic/hardened-sha-1-vs-weakened-sha-256-how-to-test-them-5467882Edit: 5. Your peers would not accept an infinite chain, but only coins, up to 2 hours in the future, or in the past. Which means, that you can share only 6 blocks per second in this way (so, 7200 seconds per 2 hours means something around 43200 blocks, which is far less than infinity), even if you avoid Median Time Past 11 blocks rule, by producing identical hashes for different block times, over a span of N blocks.
Edit: 6. The current time of the block is a 32-bit number, which means, that your chain can only consist of 25,769,803,776 blocks, if you change only block time, and nothing else, and it leads you to identical hash somehow. Which is far less than infinity.
Even if you consider running regtest publicly, where blocks can appear at a rate of 6 blocks per second, then still, it gives you only 43,200 blocks per 2 hours, which is far less than infinity. There are many protections in place, to avoid "infinity data bomb", and it is hard to construct
the infinitely large .zip file equivalent, even if you can break SHA-256 somehow.
So, if you want to create a large data structures, then having identical hash is not the way to go. Rather, you should produce a chain, where hashes are connected in a "A -> B -> C -> ... -> Z -> A" way, where you have a ring of constantly repeated data.