You can still use this approach.
For 3D Just move the camera much further away so that the entire city is in the view volume. [or make the view volume wider/higher if using orthographic projection]
You will have to make the size of the render target much bigger to accommodate the required resolution, but you will not be able to make a texture more than 4,096 pixels in either dimension.
If 4,096 sized textures is not enough, than you could look at making a number of textures
[EDIT]
For 2D just render the scene on a render target much larger than the screen size e.g 4096 pixels across, making sure that you render things with the same scale (i.e. if a building is 10 pixels across on screen, it should be 10 pixels across on the render target). This way you will get a much larger area of your city drawn. You can then draw subsections of this texture on the screen.
int vpw = graphics.GraphicsDevice.Viewport.Width;
int vph = graphics.GraphicsDevice.Viewport.Height;
spriteBatch.Begin();
//camera.Position is the point in the world you want at the centre of the screen
//cityRect is the sub-area of the large background you want to display
Rectangle cityRect=new Rectangle(
(int)(camera.Position.X-vpw/2),
(int)(camera.Position.Y-vph/2),
vpw,
vph);
//cityTexture is the large pre-rendered texture
spriteBatch.Draw(cityTexture, Vector2.Zero,
cityRect, Color.White);
spriteBatch.End();