My template won’t apply, theme still fallback to index.php

What you are doing, if I understand correctly, is overly complicated, is a bit of a hack around the Core functionality of CPTs, and is probably less efficient than letting the Core handle it.

WordPress will generate an index listing for your post type if you register it appropriately. That is, if you register it with 'public' => true as you can see in this example from the Codex:

function codex_custom_init() {
    $args = array( 'public' => true, 'label' => 'Books' );
    register_post_type( 'book', $args );
}
add_action( 'init', 'codex_custom_init' );

WordPress will then use these two templates, if present, to display the content:

  • single posts of a custom post type will use single-{post_type}.php
  • and their archives will use archive-{post_type}.php

http://codex.wordpress.org/Post_Types#Custom_Post_Type_Templates