I did turn seqscan off and it did force index use -- but not the "right" one. But it uses other indexes on the base table the view is part of, which is strange to me.
I don't see how to substitute a subselect for the outer join here. Looks like my only option is to get rid of the weapon_and_type_v; the optimizer does a much better job with the base tables.