In (1), the problem is that the expression is parsed like searchsortedfirst(@view(A[5:end], x0)), i.e. the two arguments are taken together. Just add explicit parantheses to the first argument — searchsortedfirst(@view(A[5:end]), x0) instead.
For (3), the macro and function call versions need to differ since end is not valid in an arbitrary function call argument (i.e. it needs the context of the array indexing to be automatically lowered to valid code). The correct form would look something like vA = view(A, 5:endof(A)).
Using a view has the problem that it allocates on julia 0.6. If you need to construct these views in an inner loop, then this will mean trouble. Luckily the thing you are asking for is already provided in sort.jl; use the following:
searchsortedfirst(A, x, lo, hi, order) searches only in the interval lo:hi. In order to get the same result as for the view, you need to shift the indices again, i.e. subtract (lo-1). You can also use this version to speed up the search, if you already know something about the position of your target.
For some unclear reason, this variant is not exported with all the fancy default argument bells-and-whistles. This means that you need to provide the order explicitly. This is done by Base.Order.ForwardOrdering(), which is the default used by searchsortedfirst(A, x). If you used keyword parameters (e.g. searchsortedfirst(A, x; by=fun)) then you would need to look into sort.jl in order to see how to provide these.