After metazone was introduced in ICU 3.8, formatting time zone name became much slower than before. The support of metazone itself requires much complicated things to be done for formatting time zone, but could be improved. For now, there are some major concerns:
Names are stored in a huge data structure created at run time. For each locale (including region variants, because selection of names could be different by region, for example, US vs CA), the data structure is created at the first call (then cached), which takes a good amount of time. We may pre-build the structure in a bundle.\\\\
getDisplayName in TimeZone class always create a new SimpleDateFormat to get a display name. It should access the data directly.\\\\
getDisplayName in TimeZone could return different names by date, because display name can be changed time to time. The API does not accept date as input argument (it uses current date).