You first need a product that can issue sound to two devices simultaneously.
Not many sound products can do that, as the majority just issues the sound to
the default sound device. Or you can run two players of the same file, each
issuing its sound to a different card (hard to synchronize correctly).
A product that does video editing and mixing might be capable of doing this.
I have heard that MixPad (shareware $59.95) is
one such product.
It should also be possible with the open-source GStreamer multimedia
framework (some study required), by creating a pipe similar to this :
# The number and order of the tracks must be known
gst-launch-1.0 \
filesrc location=example.mkv ! decodebin name=decoded \
decoded.src_0 ! queue ! autovideosink \
decoded.src_1 ! queue ! audioconvert ! alsasink device="hw:1,0" \
decoded.src_2 ! queue ! audioconvert ! alsasink device="hw:2,0"