Ok I think I've found solution to all my problems described in the first post. I should generate another grid not for geometry but for logic and store any info I want there (in tiles). I've read about this solution here: http://www.richardssoftware.net/2013/12/pathfinding-1-map-representation-and.html and I think it completely satisfies my needs.
You can store the data inside your heightmap, use R and G channels for the height level, B for the construction data and the alpha channel for the speed factor.Using this approach you will only need a short lookup function. Just remember to store the texture info inside the heightmap when you "paint" your terrain.
Thank you for your answer but I think I'll stick to having additional grid for storing all required data. As far as I understand this is a common way to handle things in RTS games.