You could try something like the following:
- Custom content type 'location' with the fields you need for your locations
- Consider addressfield if these are address locations, or geofield if not
- if you need mapping, consider leaflet
- To use/display these locations elsewhere, you could add an entity reference field to other nodes or entities, and populate the field with links to the required location(s).
- if you need to embed locations (e.g. in the body of a node ) perhaps node embed or advanced entity token (I've not used either one)
- If you need to add additional view modes, you can use display suite or entity_view_mode
So, the general idea is that you define locations as needed using a custom content type. Then you attach these locations to other nodes/entities using fields or by embedding using a module that uses tokens or another special syntax.
With either approach, each location is stored just once, and the location is rendered on a page using a view mode that makes sense in that particular context.
To address your question about blocks specifically: you could indeed create blocks for company locations. To associate these blocks to pages/nodes, you could either embed the block in a node with something like insert block (https://drupal.org/project/insert_block), or attach the block to a node using block reference (https://drupal.org/project/blockreference).