Yes, that's exactly it, you can make arrays of the associated
subfields (alt, title, etc.), you just need to make sure they line up
- put in an empty value as you did for file_2, rather than omitting
the array value entirely. Note that the field handlers have some
smarts - if you pass a scalar rather than array to the subfields, that
value will be used for all files in the main array.
The source_dir applies whether the source field is populated
directly by your query or in prepareRow(), everything gets pulled
together at the prepare() stage.
Yes, set destination_file to preserve the full path.
More information about text formats