Hi,
The feature you are looking for called reverse geocoding, i.e. getting an address by geo code. So the solution can be build using only one way:
1. show a map and somehow select a view port;
2. using some API with reverse geocoding scan addresses inside the viewport with some step;
3. build a distinct list of streets found and save it.
The weakest point in this #2. Unfortunately there are very few web services can provide you a reverse geocoding. Basically, Gisgraphy is the only one I know. It doesn't have any limit on requests number, but as far as I know, it does on request frequency: 1 request per second. You can pay around 80 Euro and get unlimited access. Or you can install database locally fore free and get unlimited access as well.
So there are definitely some approaches available, but all of them have some risks.
Feel free to contact me, if you want to discuss this closely.
Regards,
Eugene