Reasons for choosing register number and address sizes in an Instruction Set
Two bits for the register and ten bits for the address makes sense when you have ~four registers and ~1024 words of memory. Any more and you can't address it all (how would you access register #5, or memory address #1025?); any less and you're wasting precious bits in every instruction (why use two bits for the register when there's only two registers to choose from?).

Generally, the purpose of a cache is to make things faster without changing the underlying model. In other words, if you don't care how fast your code is, you can just pretend the cache isn't there. Everything will work the same either way.

P.S. You can address more memory than this using various tricks like "bank switching", but I doubt you're concerned with those yet.