Is this the right and efficient way to deal with MySQL query? The table I have is 

 id,  b_name,    s_name,      from_time,    to_time
  1   Bus1       Stop1        START         0800
  2   Bus1       Stop2        0810          0811 
  3   Bus1       Stop3        0820          0821
  4   Bus1       Stop4        0830          0831 
  5   Bus1       Stop5        0840          END   
  6   Bus2       Stop1        START         0810
  7   Bus2       Stop2        0820          0821 
  8   Bus2       Stop3        0830          0831
  9   Bus2       Stop4        0840          0841 
 10   Bus2       Stop5        0850          END
 11   Bus3       Stop1        START         0820
 12   Bus3       Stop2        0830          0831 
 13   Bus3       Stop3        0840          0841
 14   Bus3       Stop4        0850          0851 
 15   Bus3       Stop5        0900          END  


I want to display results when searched from stopX to stopY without/within times (from and to times, with these being optional). This is what I did 

SELECT     st1.id, 
           st1.b_name, 
           st1.s_name,
           st1.t_time, 
           st2.id,
           st2.b_name, 
           st2.s_name,
           st2.f_time 
FROM table st1 
INNER JOIN table st2 
ON         (st1.b_name = st2.b_name)
WHERE      st1.`s_name` = 'Stop2' 
AND        st2.`s_name` = 'Stop4' 
AND        st1.to_time &lt; st2.from_time 
AND        st1.to_time &gt; '0500' 
AND        st2.from_time &lt; '0845'


Is this an efficient way to put min load?

Now how do I:


Make the time fields optional?
Stop searching from and to same s_name (like Stop3 to Stop3)?


And as the b_name and s_name fields are being repeated should I put them into a separate table as each bus may have 10-30 stops and a few hundred trips (which may increase)?
If you have two questions -- one needing times, one not needing them, then you should pick between two different queries.  That will be a lot simpler and cleaner.

For performance, have

INDEX(s_name, to_time)
INDEX(b_name, s_name, from_time)


(These two indexes should be pretty good; other indexes may work equally well.)