If you check the Handy Vandal's Almanac, there's some info on there.
This also looks like a decent explaination:
http://www.cariad.co.za/twhl/tutorial.php?id=38
FWIW, you want to keep them as low as possible in busy areas (less than 1000 should be fine), having said that, some areas of cs_proof go up to 1500, but I've not noticed any real problems there.
The main problem with info you find on the net is that it's not always up to date, so I reckon sub-1000 should be quite playable with modern PCs; and you can get away with it being higher in some places.
- I wouldn't get too worried by numbers up to 1500 until you've tried it to see if it causes problems.
When you compile the map, it's broken down into polys - If you want to get really advanced, then you can use VIS blocks to actually manually control how your map is broken down (I used this technique in one or two areas of cs_proof with some success - the 1500 poly area was originally jumping up to 2500 before I used a few VIS blocks).
But I'd only use VIS blocks as a last resort, after you've optimised as much as possible using normal techniques.
If you want to actually see what your map 'looks' like to the computer, switch to software rendering (instead of OpenGL or DirectX); and type r_drawflat 1 in the console. This can be useful if you can't understand why the r_speeds are getting higher in some areas.
Another technique (using OpenGL mode) is to use gl_wireframe 1 or gl_wireframe 2 which also shows you the polys that are being drawn.
Note: Both these techniques only work if you start a 1 Player Local Server, you can't use them when playing multiplayer.
One technique that's widely used is to leave a 1 unit gap between your brushes (e.g. move a crate 1 pixel off the ground); you can usually use this without anyone noticing and the ground won't get split where your crate is.
Alternatively, make it a func_wall, but as you mention this does have some side-effects.
Another technique is to scale up your textures where possible.
So for example, with grass, rocks, etc, change the texture scale (X and Y) from 1 to 2 and see how it looks. With textures that do not require much detail it's worth scaling them up as much as possible as this will reduce your r_speeds - don't go too far or your map looks 'blurry' - give it a bash and you should see what i mean.
I believe there are some tools you can get to do this for you, although I've never tried them.
I've also read that going 'too far' with texture scaling can actually slow things down, so the best bet is to try a few values and see what happens.
At the end of the day, most r_speed problems are down to poor deisign.
The front of the house in cs_proof has high r_speeds - because when you enter the front garden you can theoretically see into almost every room in the house (and all the details like beds and tables, etc).
This is because I didn't think things through before designing it.
By means of a comparison, consider cs_estate - how much of the house can you see through the doors and windows ? virtually none, almost all windows and doors face a brick wall, which means good r_speeds.
HTH