Pardon me, I misunderstood. I thought that you wanted to identify a block by a particular coordinate pair as opposed to getting a block and
then doing collision detection with it.
To avoid linear searching through all the blocks, you will have to partition the level somehow.
For instance, you could partition the level into a grid of cells. Each cell would store a collection of blocks that are inside of it. You may have to cut blocks into 2 or 4 such that one block is not in multiple cells. Or, you could make the size of the cells align on the width of the largest block such that block-cutting doesn't occur. Now, in a given frame, you simply determine which cell(s) the player is in, get the blocks from those cells, and do collision detection on only those. You can imagine in a level with 10,000 blocks, if there are say on average 5 blocks/cell, then each frame you would be looking at only around 20 blocks (approx. assuming the player is intersecting with 4 cells).
Another method is to recursively subdivide the scene using a BSP tree or quad tree. This is essentially the dynamic version of the above method. Instead of having cells each with a set width/height, you have a tree of rectangles/squares of increasingly finer resolutions. With this method, you can stop the subdivision if there are no blocks in the current rectangle/square. So, let's say the sky takes up the top half of the level and let's say there are no blocks in the sky. Then, when you're recursively subdividing the scene in a quad tree, for example, you would notice there are no blocks, and the sky would then take up just two leaf nodes. This can add up to big savings in the size of the data structure. So, for this method, in a given frame, you would drill down the tree to determine which nodes intersect the player (remember the nodes are squares/rectangles of differing sizes) . Then, you would enumerate over the blocks in each node. Again, you may have to cut a block and place the pieces in one, two, or four quad tree nodes to avoid block duplication.
http://en.wikipedia.org/wiki/Binary_space_partitioning
http://en.wikipedia.org/wiki/Quadtree
EDIT: kind of ninja'd, but this did take a while to write