Using a regular expression with a look-ahead condition seems to work.
library(tidyr)
toy_data <- tibble(
name_item = c(
"Apple Inc-Sales", "Orange-Inc-Sales", "Apple-Orange-Inc-Sales", "Apple-Orange-Mango-Inc-Sales",
"Apple Inc-Profit", "Orange-Inc-Profit", "Apple-Orange-Inc-Profit", "Apple-Orange-Mango-Inc-Profit"
)
)
toy_data <- separate(toy_data, col = "name_item", into = c("Company", "Type"), sep = "-(?=[^-]+$)")
toy_data
#> # A tibble: 8 x 2
#> Company Type
#> <chr> <chr>
#> 1 Apple Inc Sales
#> 2 Orange-Inc Sales
#> 3 Apple-Orange-Inc Sales
#> 4 Apple-Orange-Mango-Inc Sales
#> 5 Apple Inc Profit
#> 6 Orange-Inc Profit
#> 7 Apple-Orange-Inc Profit
#> 8 Apple-Orange-Mango-Inc Profit
Created on 2020-08-05 by the reprex package (v0.3.0)