It seems that ddrescue tries to recover all blocks on a disk or partition, even ones that don't contain files. Wouldn't it be possible for it to find out which blocks actually hold files by looking at the filesystem, e.g. master file table on NTFS?
Edit: It seems it might be possible in combination with partclone:
http://partclone.org/features/
For rescue situation, the rescue mode of Partclone would try to skip bad blocks and backup all good blocks for the partitions. The ddrescue program is another better solution to save bad disk while with partclone's help by listing all used blocks as domain file, it could make ddrescue smarter and faster when dumping a partition.
See also: http://sourceforge.net/p/partclone/mailman/partclone-user/thread/[email protected]/