Postgres stores statistics for expression indexes, so it can know that the predicate is true for half the rows.
In the worked example, adding expression indices for the integer values of value_1, value_2, and value_3 makes the JSONB solution only marginally less efficient than the full-column solution. On my computer, ~300ms instead of ~200ms.
(This is Postgres 9.5)