Some interesting concepts that you might want to look into are…
1. Broad-phase collision detection
2. Binary space partitioning (quadtrees for 2D, octrees for 3D, k-d trees for k dimensions)
3. Viewing-frustum culling
As for your questions,
1. Your map can be represented in a lossless image format on disk. An image is essentially a 2D matrix.
2. The relevant parts of your map can be loaded into memory when it is necessary.
3. The parts of the map that are necessary are those that will be visible within the amount of time that it takes to load the next parts of the map into memory. This is a recursive definition that is based on the maximum speed of your viewport and the speed of loading tiles into memory.
4. You can either check every second, which is common, or you can apply a sweep algorithm, treating time as a dimension. For inspiration, look at examples of functional reactive programming in video games.