Why when I use variables on SQL the Database Engine avoid the indexes?
Why do you believe using variables instead of parameters will improve performance?
With local variables, the plan is optimized for unknown values using average density values gleaned from statistics to estimate row counts. With parameters, OTOH, SQL Server uses the actual parameter values provided for the initial compilation to estimate row counts. This generally provides a more optimal plan but at the risk of reusing a cached plan that is suboptimal for different values.
I suggest you use a parameterized query and ensure stats are up-to-date. Add an OPTION (RECOMPILE) hint to the query to avoid parameter sniffing for the range query. This will avoid reusing a suboptimal plan and the compilation overhead is insignificant in the case of a large query executed relatively infrequently by SSIS. The recompile hint should be used judiciously and isn't appropriate for an OLTP workload query executed many times per second.
Note that the actual values are sniffed with either parameters or variables when the recompile hint is specified.