pre_get_posts or $where, which one to use?

In general this would make sense at pre_get_posts since you could just express conditions as meta query and let WP figure out SQL.

In your specific case this won’t work, since that format is horrible for programmatic comparison. Unless you can change format to something more friendly, you will probably have to write some pretty custom SQL to make it work.