I'm assuming you want a density map of how "well covered" each area is, i.e. how many offices it is near, incorporating the "radius" of those offices?
You can actually do all this within PostgreSQL, or at least within PostGIS, which is a free extension. I suggest you get hold of that, and read up on some of the docs.
You will probably then need to geocode your postcodes. A simple solution is to download the Ordnance Survey Code Point dataset (https://www.ordnancesurvey.co.uk/opendatadownload/products.html) (which is free) and give your points the database a postcode location, by using the PostGIS functions - you'll need to use ST_GeomFromText() and read up about Well Known Text co-ordinates probably.
So you should have a spatial table of all your points.
You can then buffer (create a radius around each point) them into a new spatial table using the ST_Buffer function.
You would then need to create a non-overlapping polygon overlay in PostGIS - see Separate polygons based on intersection using PostGIS. This should segment the dataset into small regions as you say above.
Then you need to query how many of the buffers intersect each your your new segmented regions. This will be quite a complicated SQL query, but it should be possible.
This is quite a complicated procedure as you can see even for someone experienced in GIS, and there are many pitfalls, such as projections etc, so I would consider your need for this before starting, however there may well be better solutions that someone else can offer.
A much easier way would proabably be to take a regularly spaced grid of points and work out the average distance to say, the five nearest offices, and colour code each grid square by average distance. However, this wouldn't take into account the "radius" of the offices - not sure what this represents - influence?