As the currently accepted answer seems to cause problems later on, here is another alternative. It is heavily based on the solution by lc. but takes care of ordering.
First off: SQL tables have no well-defined row order. When you query for all rows of a table, those rows will be returned in a certain order, but that order is undefined, may or may not be related to the order in which rows were added, and may change unexpectedly. So when you want to process your rows in a given order, you should add a column to contain some kind of sequence number or smilar. That's the reason why lc. kept bugging you about the order of locations.
If you have such a column, called seq, then you can use the following query:
SELECT GROUP_CONCAT(loc SEPARATOR ' - ')
FROM (
(SELECT 1 half, seq, SUBSTRING_INDEX(location, ' - ', 1) loc
FROM location_list
WHERE reservno='00004'
ORDER BY seq
LIMIT 1)
UNION ALL
(SELECT 2 half, seq, SUBSTRING_INDEX(location, ' - ', -1) loc
FROM location_list
WHERE reservno='00004')
ORDER BY half, seq
) locs
The union will produce a list of the various locations, which is combined into a single string using the outermost select. The first part of the union yields the first half of the first part of the route, whereas the second part of the union will give you the second half of all parts. The order of the union result is undefined so far, so we need an overall ordering rule. We also need an ordering rule for the first half, so that we really choose the first part of the route with the limit clause.
Here is an sqlfiddle based on the one Omesh set up. For lack of a seq column, it uses the icode column to order things. Therefore the result differs from the one you expected, and produce Manila - Bohol - Cebu - Manila instead.
If you add a seq column, then you'll have to change the database schema, so you might as well change it in such a way that the two endpoints of each part are turned into two distinct columns. Combining columns using CONCAT is simple, but splitting them increases complexity of the queries both for the developer and the database engine.
If you cannot add a sequence column, because you don't have control over the database schema, then you're in trouble. Your comment here indicates that you're always looking for a cycle, but finding such a cycle from unordered data is best done using a map, which isn't readily available at the SQL level. You could achieve this through a stored procedure if you must, executing one select for each part of the jurney, but I'd rather tackle this at the application level if I were you.