If you really need to know that, then your solution may be the most reliable way; it's not unlike recording a product's price as well as its ID on an invoice line.
An alternative is to have a ship_names table something like:
Code:
create table ship_names
( ship_id references ships
, from_date date
, to_date date
, name varchar(50)
);
Now you can look up the ship's name where the Job date falls between the from_date and to_date.