ok, so I know extremely little about programming and computing, but an idea's occured to me (for you to subsequently rip apart and point out why it won't work):
make use of the high/medium/low/restricted path designations such that when searching for a path, it at first only tries to path through 'high' tiles. If it can't find a path, then it tries to path through all tiles that have either 'high' or 'medium' designations. If it can't do that, then it tries using 'high', 'medium' or 'low' designations.
A few things with this:
-it doesn't use restricted tiles. Obviously it could be extended so that it would try that after the high/medium/low one didn't work, but it would be a nice way of effectively telling the dwarves THAT THEY CAN'T WALK THERE - for all intents and purposes it is a wall.
-this would only work for dwarves, they're the only ones who care about the designations
-doing this wouldn't slow it down from having to add up the 'value' (determined by whether it is high/medium etc.) of the tiles and work out the best route, as I vaguely understand it does presently. It only needs count the number of tiles.
-if there is a very long 'high' designated route, they will prefer that to a very short 'medium' designated route. But then you designated it as 'high' for a reason, right? So it wouldn't be too much to expect for the player to lay down a few 'high' routes, and if nothing else it gives you more control over where the little blighters try to go.
-it requires multiple checks, first for high, then for high/medium etc. I don't know if this is sufficiently bad to make this inviable, especially because if you just lay down some 'high' pathways you don't have to worry there.
-perhaps mark every place your dwarves mine or build as being 'high' automatically? (this could be configurable in an option menu) This would save a lot of micro when laying down 'high' pathways, because in most cases your dwarves will largely do it all for you.
-anything impassible (water/lava/walls etc.) could be automatically marked as 'restricted', so it doesn't have to check for both restricted designations and natural obstructions.
-if there is no path then it goes through all 3 iterations. My lack of programming knowledge comes in here, but is it possible to quickly check if there is ANY path? If it is quick then that could be added before it checks for a 'high' path.
-if a dwarf is completely hemmed in by 'restricted' designations, and then something nasty comes along like lava or a zombie whale, he won't budge an inch to save himself.
Anyway, done.