How pass a 0 in $atts?

This happens, because WP checks the value with empty():

if ( ! empty( $value ) )

… and empty() is TRUE for values like 0 or "0".

You have two options now:

  1. Filter walker_nav_menu_start_el and replace <a with <a tabindex=0.
  2. Pass $atts['tabindex'] = "0 "; in your original function. Note the extra space. It circumvents the empty check. Test it with different browsers.