I have put a map together using openstreemap data that is intended to be used as a base for different projects. However due to the amount of information (number of layers) the loading time is rather slow. I was wondering if there is a way to select items in all layers within an area by using the selected features only once (well can be a few more times, but not once for each layer) and save them separately, so that I can load only the information within a specified suburb in a project, rather than the entire city?
You could use the plugin "Clip Multiple Layers" (https://plugins.qgis.org/plugins/ClipMultipleLayers/) to do this. This will clip all of the layers within the extent of a selected polygon and save them to a location of your choice. You could do this for each district or area, then create a layer file for each group to allow you to easily drag in each batch of layers.
Note that for very large/complex shapefiles the process can be very time consuming and does crash occasionally. So limiting the inputs by getting rid of unused data is a useful first step.
It's difficult to use one unique tool to get this result. You could merge layers and realize just one geographic request and later, split your result....but it's not the beter way and it's time consuming.
It's possible to get a result from many layers through many solutions :
SQL : Use postgis + Qgis to request layers (= table) and save results to different table (= import table to qgis as layer). You can connect postgis Databases to Qgis with database manager extension.
SQL : Use QSpatiaLite extension to directly create SQL request on Qgis and create dynamically your result without postgis or others outside tools
Use Qgis graphical modeler to automatically realize vector calculs and delete manual operations (http://docs.qgis.org/2.0/ca/docs/user_manual/processing/modeler.html)